Tsql T-SQL日期转换日期从年月日到年月日

Tsql T-SQL日期转换日期从年月日到年月日,tsql,sql-server-2008-r2,type-conversion,Tsql,Sql Server 2008 R2,Type Conversion,我读过几篇关于从dd/mm/yyyy转换为yyyy-mm-dd的文章,但是代码不起作用(CONVERT-AND-CAST)。请参阅下面的示例,并告知您是否可以提供帮助,因为我得到的错误是“从字符串转换日期和/或时间时转换失败”。如果我将我的日期更改为“2010-09-12”,它将工作,但我需要以某种方式转换它,因为如果我说选择getdate(),它将输出此日期格式(yyyy-mm-dd) 这很有趣,因为我的工作PC上的代码不适用于我,我使用的是MicrosoftSQLServerManageme

我读过几篇关于从dd/mm/yyyy转换为yyyy-mm-dd的文章,但是代码不起作用(CONVERT-AND-CAST)。请参阅下面的示例,并告知您是否可以提供帮助,因为我得到的错误是“从字符串转换日期和/或时间时转换失败”。如果我将我的日期更改为“2010-09-12”,它将工作,但我需要以某种方式转换它,因为如果我说选择getdate(),它将输出此日期格式(yyyy-mm-dd)

这很有趣,因为我的工作PC上的代码不适用于我,我使用的是MicrosoftSQLServerManagementStudio 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

thx

您需要查看一下,您会发现我们还需要提供格式,以便它能够根据我们的要求格式化日期。它在您的家庭系统上工作的原因可能是您的系统配置为您提供日期的格式

解决你的问题

DECLARE @x VARCHAR(13) = '12/09/2010'

SELECT RIGHT(@x,4) + '-' + LEFT(RIGHT(@x,7),2) + '-' + LEFT(@x,2)

旁注:


不建议使用
NVARCHAR
VARCHAR
CHAR
存储日期,以避免此类问题。您可以更好地使用
DATE
datatype来存储日期。

是否有无法在应用程序级别转换日期的原因?因为您没有说明日期格式。对于隐式数据类型转换,每台计算机可能有不同的版本或设置。为什么不使用日期数据类型来表示日期呢?正如其他人之前所评论的:使用日期类型来存储日期。如果无法更改基础数据类型:首先将VARCHAR转换为DATE,然后将日期转换回具有适当格式的VARCHAR。此链接显示的是。您好,我期待您的回复。:)好的,但即使我把date和date分别放在date和timestamp2中,它仍然不起作用,因为当你说insert到测试值中时('12/09/2010'不是它想要的格式。所以这是我的问题。@user3497385这是因为您仍在使用字符串,格式也不明确。最好的选择是使用参数化查询并将客户机的日期作为日期参数传递。或者使用像
20100912
这样的明确格式来存储2010年9月12日或ISO 8601日期时间格式。即使是
2010-09-12
对于仅日期的文本也不是明确的。它存储为nvarchar可能是有原因的,因此没有必要指出明显的错误out@theweeknd:-这就是为什么它在旁注上被判为
;)所以即使这样做,问题仍然存在:创建表测试(名称varchar(50),timestamp2 date,date_engaged date,LOS nvarchar(60))插入测试(名称,date_engaged)值('jj','25/09/2005')我对declare选项的关注是它指的是一个特定的日期(?)。我有数千行不同的日期。啊哈!:-)谢谢:)