我無法找到的日期時間轉換一個更優雅的解決方案,但在這裏你去:
1. DATETIME轉換
這裏假設你的價值總是在你指定的格式相同:
示例代碼,您可以運行
DECLARE @Value VARCHAR(255) = '20131211142319'
SELECT CONVERT(DATETIME,LEFT(@Value,8) + SPACE(1) + STUFF(STUFF(STUFF(RIGHT(@Value,6), 1, 0, REPLICATE('0', 0)),3,0,':'),6,0,':'))
這將字段分爲兩部分,日期部分LEFT(@Value,8)
,然後是時間 STUFF(STUFF(STUFF(RIGHT(@Value,6), 1, 0, REPLICATE('0', 0)),3,0,':'),6,0,':')
。 TIME部分基本上只是在適用的情況下在冒號中添加(參見MSDN上的STUFF),以便返回如下值:
20131211 14:23:19
這使其適用於直接轉換爲DATETIME。
2.卸下#從數字
示例代碼,您可以運行
DECLARE @ValueNumber VARCHAR(255) = '#8339274'
SELECT SUBSTRING(@ValueNumber,2,LEN(@ValueNumber))
上面的語句將你的號碼,只能從第二個值返回數據起,不包括#。請參閱MSDN上的SUBSTRING
要在您的表上運行此操作,只需將SELECT
語句中的變量名替換爲列名。
實施例使用關於列在上述表中的:
SELECT CONVERT(DATETIME,LEFT([DATECOLUMNNAME],8) +
SPACE(1) + STUFF(STUFF(STUFF(RIGHT([DATECOLUMNNAME],6),
1, 0,REPLICATE('0',0)),3,0,':'),6,0,':')) AS [Date],
SUBSTRING([NUMBERCOLUMNNAME],2,LEN([NUMBERCOLUMNNAME])) AS [Number]
FROM [TABLENAME]
替換[DATECOLUMNNAME]與保持你的日期時間值的列的名稱。將[NUMBERCOLUMNNAME]替換爲包含您的號碼的列的名稱。
然後最後用包含這些列的表名替換[TABLENAME]。
很抱歉,但我不明白我怎麼能使用上表中的所有行此解決方案。 – murdoqq
請參閱上述編輯。你想只是執行一個選擇或更新表中的數據?由於列是varchar類型而不是datetime,因此無法使用轉換後的datetime值更新表。 – JBond