2012-07-16 33 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)