T-SQL 日期转换 dd/mm/yyyy 到 yyyy-mm-dd
Posted
技术标签:
【中文标题】T-SQL 日期转换 dd/mm/yyyy 到 yyyy-mm-dd【英文标题】:T-SQL date conversion dd/mm/yyyy to yyyy-mm-dd 【发布时间】:2015-09-02 08:39:45 【问题描述】:我已经阅读了几篇关于从 dd/mm/yyyy 转换为 yyyy-mm-dd 的帖子,但代码不起作用(转换和转换)。请参阅下面的示例,如果您能提供帮助,请告知我遇到的错误是“从字符串转换日期和/或时间时转换失败”。如果我将 date_engaged 更改为“2010-09-12”,它将起作用,但我需要以某种方式对其进行转换,因为如果我说选择 getdate(),它会输出这种日期格式 (yyyy-mm-dd)。
这很有趣,因为代码在我的工作 PC 上不适合我,我使用的是 Microsoft SQL Server Management Studio 2008,但在家里,它工作得很好。
create table test(
name varchar (10),
date_engaged nvarchar (20),
timestamp2 nvarchar (20),
LOS nvarchar (20)
)
insert into test (name,date_engaged) values ('JJ','12/09/2010')
update test
set timestamp2=CAST(DATEADD(month,0,dateadd(month,datediff(month,0,getdate()),-1)) AS DATE)
update test
set LOS=DATEDIFF(day,date_engaged,timestamp2)/365.25
谢谢
【问题讨论】:
是否有无法在应用程序级别进行转换的原因? 因为你没有说明日期格式。并且每台计算机可能有不同的版本或设置来进行隐式数据类型转换。为什么不使用日期数据类型作为日期? 正如其他人之前评论过的:使用 DATE 类型来存储日期。如果无法更改基础数据类型:首先将 VARCHAR 转换为 DATE,然后将 DATE 转换回具有适当格式的 VARCHAR。此链接显示options for CONVERT。 嗨,我期待这个回复。 :) 好的,但是即使我将 date_engaged 的日期和 timestamp2 的日期放在一起,它仍然不起作用,因为当您说插入测试值时('12/09/2010' 不是它想要的格式。所以这是我的问题。 @user3497385 那是因为您仍然使用字符串,格式也很模糊。最好的选择是使用参数化查询并将来自客户端的日期作为日期参数传递。或者使用20100912
之类的明确格式来存储 2010 年 9 月 12 日或 ISO 8601 日期时间格式。甚至 2010-09-12
对于仅限日期的文字也不是明确的。
【参考方案1】:
您需要查看MSDN docs for CONVERT,您会发现我们还需要提供格式,以便它可以根据我们的要求格式化日期。它在您的家庭系统上运行的原因可能是因为您的系统配置为您提供日期的格式。
解决您的问题
DECLARE @x VARCHAR(13) = '12/09/2010'
SELECT RIGHT(@x,4) + '-' + LEFT(RIGHT(@x,7),2) + '-' + LEFT(@x,2)
DEMO
附带说明:
不建议使用NVARCHAR
或VARCHAR
或CHAR
来存储日期,以免出现此类问题。您可以更好地使用DATE
数据类型来存储日期。
【讨论】:
将其存储为 nvarchar 可能是有原因的,因此没有必要指出明显的原因 @theweeknd:- 这就是为什么它被判处On a side note
;)
所以即使你这样做,问题仍然存在:创建表测试(name varchar(50),timestamp2 date,date_engaged date,LOS nvarchar(60))插入到test(name,date_engaged)值('jj','25/09/2005')
我对 declare 选项的担忧是它指的是特定日期(?)。我有数千行不同的日期。
啊哈! :-) 谢谢 :)以上是关于T-SQL 日期转换 dd/mm/yyyy 到 yyyy-mm-dd的主要内容,如果未能解决你的问题,请参考以下文章
将 mm/dd/yyyy 转换为 yyyymmdd (VB.NET)
jsp 中怎样把日期dd/mm/yyyy 转换成 yyyy-mm-dd 格式
如何迅速转换日期格式 yyyy-mm-dd转为yyyy/mm/dd