我有一个包含日期列INTEG_LOG
的表DATE_LOG
。从那天起,我需要以20171907
格式和094225
之类的小时提取日期。
首先我试着去约会。为此,我使用这一行:
SELECT
REPLACE(CONVERT(VARCHAR(10), DATE_LOG, 111), '/', '') AS LOG_DATE
FROM
INTEG_LOG
这不是很干净,但工作正常。
我决定用这条线做同样的时间:
SELECT
REPLACE(CONVERT(VARCHAR(8), DATE_LOG, 108), ':', '') AS LOG_HOUR
FROM
INTEG_LOG
但是这个SQL抛出
将数据类型日期转换为varchar
时出错
我甚至试过没有替换,我仍然得到同样的错误。
我真的不明白为什么第一个使用111风格的转换工作正常而不是108。
我正在使用SQL Server 2008 R2。
由于
答案 0 :(得分:2)
我有一张INTEG_LOG表,其中包含日期列DATE_LOG
您获得的错误是合法的,因为日期类型没有时间组件,因此您无法使用样式108将其转换为字符串
试试这个
select REPLACE(CONVERT(VARCHAR(100), CAST(getdate() AS DATE), 108), ':', '')
你会得到同样的错误。
所以你应该选择一个这样的常量:
select '000000' AS LOG_HOUR
或者将您的日期投射到日期时间,您将使用您的代码获得thame:
SELECT
REPLACE(CONVERT(VARCHAR(8), cast(DATE_LOG as datetime), 108), ':', '') AS LOG_HOUR
FROM
INTEG_LOG