SQL Server Express中将datetime2(7)列转换为date类型的语法问题
错误原因说明
你之前的两段写法都存在语法/逻辑错误:
- 第一段代码仅将当前系统时间转换为
datetime2(7)格式,完全未关联目标表的annexDate列 - 第二段代码
CONVERT函数的括号、参数顺序完全错误,且目标转换类型写反
正确写法
分两种使用场景选择即可:
1. 仅查询时临时转换格式,不修改原表存储结构
USE bigCity GO -- 写法1:使用CONVERT函数 SELECT CONVERT(date, annexDate) AS annexDate FROM dbo.stateByStatehood; -- 写法2:使用更简洁的CAST函数,效果完全一致 SELECT CAST(annexDate AS date) AS annexDate FROM dbo.stateByStatehood;
如果需要指定日期输出的字符串样式,可以在CONVERT函数第三个参数加样式码,比如输出yyyy-MM-dd格式的字符串可以用CONVERT(varchar(10), annexDate, 23)。
2. 永久修改表结构,将该列的存储类型直接改为date
操作前建议先备份表数据,避免异常丢失数据:
USE bigCity GO -- 若该列存在索引、非空约束或其他绑定规则,需先删除对应约束再执行修改 ALTER TABLE dbo.stateByStatehood ALTER COLUMN annexDate date [NULL/NOT NULL];
替换语句中的[NULL/NOT NULL]为你需要的非空属性即可,修改后该列会自动丢弃原datetime2(7)类型的时分秒、精度部分,仅保留日期值。
内容的提问来源于stack exchange,提问作者robertmullins
相关产品推荐
相关产品推荐

