我有一个表格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。
谢谢
我有一个表格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