在SQL Server中转换日期格式 - 获取数据类型错误

时间:2017-11-01 19:07:40

标签: sql sql-server

尝试将我的日期转换为其他格式但遇到问题。

目前,我的日期列如下:

YearBuilt
1934-01-01 00:00:00:0000
1981-01-01 00:00:00:0000

我想拥有它:

YearBuilt
01/01/1934 00:00:00:0000
01/01/1981 00:00:00:0000

我试过

update table set YearBuilt = '01/01/' + YearBuilt

但是得到错误:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

但是我的YearBuilt列已经是一个日期时间数据类型,所以我不确定它正在尝试转换哪个字符串。

任何意见都将深表感谢!

3 个答案:

答案 0 :(得分:2)

日期/时间以内部格式存储在SQL中。这是一件好事!您应该在输出中指定格式。也就是说,你可以这样做:

select '01/01/' + datename(year, YearBuilt)

您可以将其构建到表格中:

alter table t add YearBuilt_str as ('01/01/' + datename(year, YearBuilt))

然后只需使用字符串版本即可获得替代格式。

答案 1 :(得分:0)

试试这个:

DECLARE @D DateTime = '2017-11-01 00:00:00:000';

SELECT @D AS Input,
       CONVERT(VARCHAR(50) , @D, 101) +
       SUBSTRING(CONVERT(VARCHAR(50), @D, 113), 12, LEN(CONVERT(VARCHAR(30), @D, 113))) AS OutPut;

结果:

+---------------------+------------------------+
|        Input        |         OutPut         |
+---------------------+------------------------+
| 01.11.2017 00:00:00 | 1/11/2017 00:00:00:000 |
+---------------------+------------------------+

答案 2 :(得分:0)

如果您的列具有Date Time数据类型,则无法使用自定义日期格式更新日期。

但是,您可以通过SQL查询

,使用自定义格式选择日期
SELECT '01/01/'+CONVERT(VARCHAR(4), YEAR(YearBuilt))+' '+CONVERT(VARCHAR(MAX), CAST(YearBuilt AS TIME)) [YearBuilt]
FROM <table_name>; 

结果:

YearBuilt
01/01/1934 00:00:00.0000000
01/01/1981 00:00:00.0000000