测试的表结构数据如下
其中“OrderDate”,“RequiredDate”和“ShippedDate”三个字段的格式是datetime格式
这种格式下,直接用like进行日期的模糊查询是没有结果的
我们可以使用convert()来转换datetime成varchar
CONVERT(varchar,OrderDate,21)
#CONVERT(A,B,C):A代表目标格式,B代表要对象列,C这里代表日期的格式
下表部分规范
不带世纪数位(yy) | 带世纪数位(yyyy) | Standard | 输入/输出 |
---|---|---|---|
- | 0或100 | datetime和smalldatetime的默认值 | mon dd yyyy hh:miAM (或PM) |
1 | 1或101 | 美国 | 1=mm/dd/yy 101=mm/dd/yyyy |
- | 20或120 | ODBC规范 | yyyy-mm-dd hh:mi:ss(24h) |
- | 21或121 | time,date,datetime2和datetimeoffset的ODBC规范(带毫秒)默认值 | yyyy-mm-dd hh:mi:ss.mmm(24h) |
… | … | … | … |
完整表格及更多的信息,请参考官方文档
现在,用这方法来筛选97年12月的数据
SELECT
*
FROM
Orders
WHERE
CONVERT(varchar,OrderDate,21) LIKE '%1997-12%'
结果如下图