日期格式的like模糊查询真的好怪,在一个项目中,我试了很多种查法:
select * from T where sendTime like '%2007_12_%' 可以查询2007年12月的所有记录
如果like条件改为'%2007-12-%' ,'%2007_12_3%' ,或'%2007_12_30%' 都查不出数据。还有:
select * from T where sendTime like '%12_30%' 可以查询12月30日的所有记录
如果like条件改为'%07_12_30%' 也查不出数据。
一直搞不明白是怎么回事。不过现在找到了一个很好的解决方法:
将数据库中的时间字段格式改为字符串格式。
SELECT * FROM T WHERE Convert(varchar,sendTime,120) LIKE '2007-12-30%'
其中:T为数据库的表,sendTime是数据库中的时间字段的字段名。这样就可以查询2007-12-30的记录了。
顺便把SQL Server中Convert函数的用法贴出来。
CAST 和 CONVERT
将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。
语法
使用 CAST:
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])
参数
expression
是任何有效的 Microsoft? SQL Server? 表达式。有关更多信息,请参见表达式。
data_type
目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。
length
nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。
style
日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。
SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。
在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。
不带世纪数位 (yy) | 带世纪数位 (yyyy) | 标准 |
输入/输出** |
---|---|---|---|
- | 0 或 100 (*) | 默认值 | mon dd yyyy hh:miAM(或 PM) |
1 | 101 | 美国 | mm/dd/yyyy |
2 | 102 | ANSI | yy.mm.dd |
3 | 103 | 英国/法 |