SELECT TOP 20 *
FROM TM_MeasureInfo
WHERE (CAST(C_GrossTime AS Varchar) LIKE '2012-03-29%')
数据库的C_GrossTime字段是日期型的,用户的输入是字符型的,因此需要转换一下
可使用上面的语句怎么也查不到结果(数据库里是有2012-03-29这天的数据的)后来SELECT了一下CAST(C_GrossTime AS Varchar)才发现,转换后的日期格式不对,变成了03 29 2012。
怎样才能保持原有日期格式呢?

解决方案 »

  1.   

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
    Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
    Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
    Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
    Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
    Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
    Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
    Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
    Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
    Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
    Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
    Select CONVERT(varchar(100), GETDATE(), 12): 060516
    Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
    Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
    Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
    Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
    Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
    Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
    Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
    Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
    Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
    Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
    Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
    Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
    Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
    Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
    Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
    Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
    Select CONVERT(varchar(100), GETDATE(), 112): 20060516
    Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
    Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
    Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
    Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
    Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
    Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM常用:
    Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
    Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
    Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
    Select CONVERT(varchar(100), GETDATE(), 12): 060516
    Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
      

  2.   


    SELECT TOP 20 *
    FROM TM_MeasureInfo
    WHERE (convert(varchar(10),C_GrossTime ,120) LIKE '2012-03-29%')
      

  3.   

    http://www.cnblogs.com/dreamof/archive/2009/02/02/1382487.htmlsql常用函数
      

  4.   

    SELECT TOP 20 *
    FROM TM_MeasureInfo
    WHERE  convert(varchar(10),C_GrossTime,120)= '2012-03-29'
      

  5.   

    谢谢各位,我在网上查过convert函数可以设置格式,但用CAST不能实现类似的功能吗
      

  6.   

    SELECT TOP 20 *
    FROM TM_MeasureInfo
    WHERE  convert(char(10),C_GrossTime,120) ='2012-03-29'
      

  7.   

    尽可能不要再where子句中使用函数处理字段,这样无法利用到索引,查询效率很差。楼主的代码可以修改成这样:
    SELECT TOP 20 *
    FROM TM_MeasureInfo
    WHERE C_GrossTime>='2012-03-29 00:00:00.000'
    AND C_GrossTime<'2012-03-30 00:00:00.000'
    用户输入的时间条件,可以在UI段进行转换,也可以在执行SQL代码前进行转换。
      

  8.   

    谢谢各位的热心帮助,学习了。最后再问一下,我数据库里存的是2012-3-29,对应convert的哪个格式编号呢?1L给的格式中没有。。
      

  9.   


    . 数据类型转换函数(以下两种函数功能类似,但是 convert 在进行日期转换时还提供了丰富的样式,cast 只能进行普通的日期转换)函数名称 参数 示例 描述convert(数据类型[(长度)],表达式[,样式])select convert(nvarchar,123) 返回123select N'年龄:'+convert(nvarchar,23)返回 年龄:23(注意:如果想要在结果中正确显示中文需要在给定的字符串前面加上 N,加 N 是为了使数据库识别Unicode 字符)select convert(nvarchar ,getdate())将一种数据类型的表达式显式转换为另一种数据类型的表达式。长度:如果数据类型允许设置长度,可以设置长度,例如varchar(10)样式:用于将日期类型数据转换为字符数据类型的日期格式的样式。见下表返回 04 28 2009 10:21PMselect convert(nvarchar ,getdate(),101)返回 04/28/2009select convert(nvarchar ,getdate(),120)返回 2009-04-28 12:22:21Select convert(nvarchar(10) ,getdate(),120)返回 2009-04-28cast(表达式 as 数据类型[(长度)])select cast(123 as nvarchar)返回 123select N'年龄:'+cast(23 as nvarchar)返回 年龄:23将一种数据类型的表达式显式转换为另一种数据类型的表达式。日期类型数据转为字符数据类型的日期格式的部分样式表当两个不同数据类型的表达式用运算符组合后,数据类型优先级规则指定将优先级较低的数据类型优先转换为优先级较高的型。 如果此转换不是所支持的隐式转换,则返回错误。 当两个操作数表达式具有相同的数据类型时,运算的结果便为该数据类型。如果需要把优先级高的数据类型转换优先级低的数据类型时需要使用数据类型转换函数进行显示转换。 SQL Server 2005 对数据类型使用以下优先级顺序(先高后低):不带世纪数位 (yy)带世纪数位 (yyyy)标准输入/输出-0 或 100默认设置mon dd yyyy hh:miAM(或 PM)1 101美国mm/dd/yyyy 2 102 ANSI yy.mm.dd 3103英国/法国dd/mm/yy 4 104德国dd.mm.yy 5 105意大利dd-mm-yy 120ODBC 规范yyyy-mm-ddhh:mi:ss(24h)
      

  10.   

    SELECT TOP 20 *
    FROM TM_MeasureInfo
    WHERE convert(char(10),C_GrossTime,120) LIKE '2012-03-29' 这样应该可以的