SqlServer中Datetime类型用Like查找的问题

 在数据表中有一字段类型为datetime时,输入如下的sql语句查询无效,会返回0个记录:

select count(*) as num from ziyuaninfo where addtime like '2011%'

在数据表中有一字段类型为datetime时,输入如下的sql语句查询无效,会返回0个记录:

select count(*) as num from ziyuaninfo where addtime like '2009%'

刚开始不解,好像以前是用这条语句查询,一直是正确的?现在怎么就……。

稍一冷静蓦然想起过去常将存放日期数据的字段类型设为varchar(50),因而查询无误,时间一常便形成一种误解,以为datetime类型可以用上面的语句查询。在对日期类型数据查询时,必须要使用convert转换,正确的语句如下:

select count(*) as num from ziyuaninfo where convert(varchar(50),addtime,120) like '2009%'

即可查到所需结果。在convert函数中,第一个参数“varchar(50”是转换类型的结果,第二个参数“addtime”是要转换的字段,第三个是将日期数据转换的格式。格式含义如下:

------------------------------------------------------------------------------------------------------------
Style(2位表示年份)   | Style(4位表示年份)   |   输入输出格式                                   
------------------------------------------------------------------------------------------------------------
0                               | 100                           |   mon dd yyyy hh:miAM(或PM)             
------------------------------------------------------------------------------------------------------------
1                               | 101   美国                |   mm/dd/yy                                      
------------------------------------------------------------------------------------------------------------
2                               | 102    ANSI               |   yy-mm-dd                                       
------------------------------------------------------------------------------------------------------------
3                               | 103    英法                |   dd/mm/yy                                      
------------------------------------------------------------------------------------------------------------
4                               | 104    德国                |   dd.mm.yy                                       
------------------------------------------------------------------------------------------------------------
5                               | 105    意大利             |   dd-mm-yy                                       
------------------------------------------------------------------------------------------------------------
6                               | 106                            |   dd mon yy                                       
------------------------------------------------------------------------------------------------------------
7                               | 107                            |   mon dd,yy                                       
------------------------------------------------------------------------------------------------------------
8                               | 108                            |   hh:mm:ss                                        
------------------------------------------------------------------------------------------------------------
9                               | 109                            |   mon dd yyyy hh:mi:ss:mmmmAM(或PM)
------------------------------------------------------------------------------------------------------------
10                             | 110    美国                 |   mm-dd-yy                                        
------------------------------------------------------------------------------------------------------------
11                             | 111    日本                 |   yy/mm/dd                                       
------------------------------------------------------------------------------------------------------------
12                             | 112    ISO                  |   yymmdd                                          
------------------------------------------------------------------------------------------------------------
13                             | 113     欧洲默认值     |   dd mon yyyy hh:mi:ss:mmm(24小时制)
------------------------------------------------------------------------------------------------------------
14                             | 114                            |   hh:mi:ss:mmm(24小时制)                   
------------------------------------------------------------------------------------------------------------
20                             | 120     ODBC 规范     |    yyyy-mm-dd hh:mi:ss(24小时制)        
------------------------------------------------------------------------------------------------------------
21                             |   121                           |    yyyy-mm-dd hh:mi:ss:mmm(24小时制)

### SQLDateTime 类型的操作 #### 创建带有 DateTime 字段的表 为了展示如何创建包含 `DateTime` 数据类型的表格,在 SQL Server 或 MySQL 中可以使用如下语句: ```sql CREATE TABLE ExampleTable ( ID INT PRIMARY KEY, Name VARCHAR(100), CreatedDate DATETIME -- 定义一个名为CreatedDate的列,其数据类型DATETIME ); ``` #### 插入具有 DateTime 值的数据 当向含有 `DateTime` 列的表中插入记录时,可以直接指定日期时间字符串或利用当前系统的时间戳。 对于 SQL Server: ```sql INSERT INTO ExampleTable (ID, Name, CreatedDate) VALUES (1, 'Test Entry', GETDATE()); -- 使用GETDATE()获取服务器上的当前日期和时间[^1] ``` 而对于 MySQL,则可采用 NOW(): ```sql INSERT INTO ExampleTable (ID, Name, CreatedDate) VALUES (2, 'Another Test', NOW()); ``` #### 查询特定范围内的日期 要查找某个时间段内发生的事件,可以通过比较两个 `DateTime` 表达式的大小来实现。例如查询过去一周内创建的所有条目: ```sql SELECT * FROM ExampleTable WHERE CreatedDate >= DATEADD(DAY,-7,GETDATE()) AND CreatedDate < GETDATE();-- 对于SQL Server使用DATEADD函数调整日期间隔 -- 或者在MySQL里这样做: SELECT * FROM ExampleTable WHERE CreatedDate BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW(); ``` #### 更新现有记录中的 DateTime 字段 如果想要更新某一行或多行的 `DateTime` 属性,只需提供新的有效值即可。比如设置所有未分配日期项目的默认时间为今天早上8点整: ```sql UPDATE ExampleTable SET CreatedDate = CAST(CAST(GETDATE() AS DATE) AS DATETIME)+CAST('08:00:00' AS TIME)-- 这是在SQL Server里的做法 -- 而在MySQL下则应这样写: UPDATE ExampleTable SET CreatedDate = CONCAT(CURDATE(),' ','08:00:00'); ``` #### 将 DateTime 格式化输出 有时需要按照一定的格式呈现给定的 `DateTime` 变量。这通常涉及到调用相应的格式化方法。以 SQL Server 和 MySQL 的不同方式为例: - **SQL Server** ```sql SELECT FORMAT(CreatedDate,'yyyy-MM-dd HH:mm:ss') As FormattedDate FROM ExampleTable;-- 使用FORMAT函数自定义输出样式 ``` - **MySQL** ```sql SELECT DATE_FORMAT(CreatedDate,'%Y-%m-%d %H:%i:%s') As FormattedDate FROM ExampleTable; ``` #### 批量修改多张表结构增加 DateTime 字段 针对多个相似命名模式下的表一次性添加相同名称的新字段,可通过动态构建 SQL 语句完成此任务。下面给出的是适用于 MySQL 的例子: ```sql SELECT CONCAT( 'ALTER TABLE ', table_name, ' ADD COLUMN create_time_date DATETIME DEFAULT NULL;' ) FROM information_schema.tables WHERE table_name LIKE 'hts_%'; ``` 上述命令会生成一系列用于更改各目标表架构的指令列表[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值