【发布时间】:2017-07-19 07:49:22
【问题描述】:
我有一个表 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。
谢谢
【问题讨论】:
-
您使用的是哪个版本的 SQL Server?那列
DATE_LOG是什么数据类型?你说这是一个“日期”列 - 但如果它真的是数据类型DATE,那将不包含任何时间部分..... -
对我来说——使用 SQL Server 2014 和
DATETIME2(3)(甚至是DATETIME)数据类型列——这段代码工作得很好 -
感谢您的回答,我添加了sql server的版本。当我检查我的专栏时,这是一个日期。我已经用 GETDATE() 尝试了这些请求,并且成功了。你是对的,当我将我的专栏更改为日期时间时,它起作用了。谢谢
-
@nebra 怎么可能是日期 20171917?我猜一个月不能超过 12 个月。
-
@ЕвгенийКондратенко 这是一个错字,我想说'20171907'
标签: sql sql-server sql-server-2008-r2