转换抛出 将数据类型日期转换为 varchar 时出错



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

最新更新