首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在SQL SERVER中将VARCHAR转换为日期

在SQL SERVER中将VARCHAR转换为日期
EN

Stack Overflow用户
提问于 2017-09-13 09:17:28
回答 2查看 9K关注 0票数 1

我的表中有VARCHAR列(MyValue)。它有两种不同格式的日期值。

代码语言:javascript
运行
复制
MyValue
----------
25-10-2016
2016-10-13

我想以日期格式展示它们。

我编写了如下查询:

代码语言:javascript
运行
复制
SELECT CONVERT(date, MyValue, 105) FROM MyTable
SELECT CAST(MyValue as date) FROM MyTable

两人都给了我这个错误。Conversion failed when converting date and/or time from character string.

是否存在将数据类型格式转换为日期类型的格式,甚至存储在像上面这样的不同格式中的值?

等着你的答案。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-13 09:34:40

这个有用吗?

代码语言:javascript
运行
复制
declare @varchardates table
(
vcdate varchar(20)
)

INSERT INTO @varchardates VALUES
('25-10-2016'),
('2016-10-13')

SELECT CONVERT(date,vcdate, case when SUBSTRING(vcdate, 3, 1) = '-' 
THEN 105 ELSE 126 END) as mydate 
FROM @varchardates  

根据数据中有多少不同的格式,您可能需要扩展case语句!

有关不同格式数字的列表,请参见这里

票数 2
EN

Stack Overflow用户

发布于 2017-09-13 09:30:10

您可以使用TRY_CONVERTCOALESCE。如果转换失败,转换返回NULL,聚结返回第一个NOT NULL值:

代码语言:javascript
运行
复制
SELECT  COALESCE(TRY_CONVERT(DATETIME, x, 105), TRY_CONVERT(DATETIME, x, 120))
FROM    (VALUES('25-10-2016'), ('2016-10-13')) a(x)

我假定值2016-10-13是格式yyyy-MM-dd

您在评论中提到,您可能还有其他格式。在这种情况下,它变得非常棘手。如果您得到了一个值01-12-2017,而您不知道格式,那么就无法用来判断这是januari的日期还是12月的日期。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46193539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档