2012-07-16 37 views
0

我有一个表table_a与列field_b其中格式是字符串。SQL如何更改例如字符串。 01/06/2012至2012-06-01

在那个领域,它们被写成例如01/06/2012

我需要将其更改为2012-06-01

我不能改变字段中键入等

+5

你不应该存储在字符列日期在首位。 – 2012-07-16 09:03:23

+0

在处理日期你应该使用日期数据类型,因为这给你更多的问题,如果你使用字符.. – 2012-07-16 09:04:56

+0

db不是我的我不能在那里chage一个东西。通常它的日期htat存储在那里......但是这次我的工作要求我在该字段中存储日期... – Buar 2012-07-16 09:07:30

回答

0

大多数SQL引擎有一个子()函数。一起使用与CONCAT()来创建新的字符串:

(伪)

update table_a set field_b=concat(substring(field_b, 6, 4), '-', substring(field_b, 3, 2), '-', substring(field_b, 0, 2)) 

请参阅您的SQL服务器的手册。

+0

thnx这有帮助,我也想问一个更多的事情,如果我有格式日期yyyy-mm-dd eg.2012-08-10但日和月在worng地方写我如何使2012-10-08格式保持相同的yyyy-mm-dd。 thnx提前。 – Buar 2012-07-16 12:13:47

+0

只需翻转最后两个子字符串()调用: concat(substring(field_b,6,4),' - ',substring(field_b,0,2),' - ',substring(field_b,3,2)) 有关substring()和concat()函数的工作原理,请参阅SQL服务器手册。 – 2012-07-16 12:36:57

0
select cast(cast('01/06/2012' as DATE) as varchar(10)) 
+0

'select cast(cast('01/06/2012'as DATETIME)as varchar(10))'returns _“Jun 1 201”_ on SQL-Server 2005(no _Date_ datatype)here here in germany。 – 2012-07-16 09:08:35

+0

没有本地化问题吗?在美国,它将在一月的六号,六月一号的欧洲。 – 2012-07-16 09:08:54

+0

事情是有像thousnads不同日期不是其中之一,我需要改变他们不只是01/06/2012。但所有dd/mm/yyyy到db中的yyyy-mm-dd。 – Buar 2012-07-16 09:11:04

0
select convert(datetime,'01/06/2012',103) 
-1

这是将工作,将避免本地化问题的答案:

select cast(cast(convert(DATETIME, '01/06/2012', 103) as DATE) as NVARCHAR(10)) 

您需要使用103格式,然后将其转换为日期(切断时间),然后转换它以varchar。

1
SELECT CONVERT(DATE,CONVERT(DATEtime,'01/06/2012',103)) 

更多的例子Click here

+0

很好的回答.... upvote – 2012-07-16 09:44:09

0
update [YourDB].[dbo].[YourTable] 
set [YourColumn] = convert(nvarchar(10), convert(datetime,[YourColumn]), 126)