SQL SERVER转换函数无法使用Varchar to Date
我试图使用convert函数将存储为varchar(12)的日期转换为日期,返回时值不会改变 我尝试了CAST和CONVERT(Varchar(10),COL_Name,126),但都没有将值修改为我希望返回的日期。我认为问题可能在于我们使用的第三方服务以m(m)/d(d)/yyyy和yyyyymmdd00格式存储日期SQL SERVER转换函数无法使用Varchar to Date,sql,sql-server,Sql,Sql Server,我试图使用convert函数将存储为varchar(12)的日期转换为日期,返回时值不会改变 我尝试了CAST和CONVERT(Varchar(10),COL_Name,126),但都没有将值修改为我希望返回的日期。我认为问题可能在于我们使用的第三方服务以m(m)/d(d)/yyyy和yyyyymmdd00格式存储日期 SELECT CONVERT(varchar(10), SENIORITY, 126) SENIORITY from #TEMP1 SELECT CAST(SENIORITY
SELECT CONVERT(varchar(10), SENIORITY, 126) SENIORITY from #TEMP1
SELECT CAST(SENIORITY AS DATE) SENIORITY from #TEMP1
回报如下:
SENIORITY
8/14/2017
2017082200
2018031500
04/25/2011
04/25/2011
7/18/2011
06/20/2011
9/12/2011
7/17/2011
01/16/2012
我期待着:
SENIORITY
2017-08-14
2017-08-22
2018-03-15
2011-04-25
etc.
我很确定这是因为它有时使用yyyymmdd00存储,但我不知道如何修改查询以正确解释和转换。有什么想法吗?我想你想要:
select (case when sen9ority like '%/%/%'
then convert(date, seniority, 101)
else convert(date, left(seniority, 8))
end)
或者,您可以使用try\u convert()
和coalesce()
:
示例中有2个
SELECT
语句,但输出中只有一个。如果第一个SELECT
语句返回的数据类似于'8/14/2017'
和'2017082200'
,那么您的列资历的数据类型就错了;这不是一个日期
,而是一个varchar
。将varchar
转换为varchar
没有任何效果。这是我尝试过的两种不同选择。我知道该列是varchar,我正在尝试将其转换为date。然后您需要使用convert(date…
convert(varchar…
将值转换为varchar
。您使用的SQL server版本是什么?@OneSQLUser第二个选项缺少一个逗号。这已更正。请务必通过接受答案来表示感谢。@OneSQLUser,很高兴您找到了答案!请单击以接受正确答案在左边的灰色复选标记上,该复选标记将变为绿色,当您单击它时,我们将看到它。它可以让其他用户知道该问题有一个有效的答案,并且还可以奖励您和发布答案的人一些声誉积分。
select coalesce(try_convert(date, seniority, 101),
try_convert(date, left(seniority, 8))
)