SELECT student.student_id, student.student_name, 
      student.student_number, cast(student.birthday as datetime) as New_birthday, 
      sms_user_order.order_mobile, sms_user_order.order_time, 
      sms_user_order.unorder_time
FROM student CROSS JOIN
      sms_user_order
WHERE (IsDate(cast(student.birthday as datetime)) > 0) AND (MONTH(cast(student.birthday as datetime)) 
      = MONTH(GETDATE())) AND (DAY(cast(student.birthday as datetime)) = DAY(GETDATE())) AND 
      (CHARINDEX(',' + RTRIM(student.student_id) + ',', 
      ',' + sms_user_order.service_students + ',') > 0) AND 
      (sms_user_order.order_state = '2')
运行时,报“从字符串转换为 datetime 时发生语法错误。”
可我把datetime转换单独列成一个表,然后从这个表来查询数据就没有问题了,这是什么问题啊?郁闷!我只想用一个Select就行了,不想再建个临时表之类的

解决方案 »

  1.   

    Birthday用Date类型,如果不填入时间或者错误时间时为NULL
    取当天生日的学生直接判断Birthday IS NOT NULL跟日期匹配,
    不用转来转去
      

  2.   

    谢楼上的兄弟,但那个数据库里的表是以前就设定好的,Birthday是varchar类型,里面的格式很乱,有“2006年10月”,也有“2006-10”,还有“200610”好几种
      

  3.   

    有些串是直接转不了时间的,例如200610。在SQL里写一个函数,用于时间的转换,估计难匹 配,因为格式很混乱。