CONVERT throw将数据类型日期转换为varchar

时间:2017-07-19 07:49:23

标签: sql sql-server sql-server-2008-r2

我有一个包含日期列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。

由于

1 个答案:

答案 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