簡體   English   中英

在SQL中將字符串yyyymmddhhmmss轉換為hh:mm:ss格式

[英]Convert string yyyymmddhhmmss into hh:mm:ss format in SQL

使用像20160125173013這樣的字符串DATETIME yyyymmddhhmmss ,我想將此字符串轉換為hh:mm:ss (17:30:13)作為帶有sql update語句的表中名為“ Time”的新列。 但是我只能使用stuff函數將其轉換為17:30。 有什么可能的解決方案可以轉換?

在我的陳述中

UPDATE db
SET Time =convert(time, stuff(substring(DATETIME,9,6),3,2,':'))
FROM db
WHERE Time IS NULL

實際輸出= 17:13:00.0000000

但我的預期輸出是17:13:00

非常感謝!

這是mysql的奇跡:

SELECT time(str_to_date('20160125173013', '%Y%m%d%H%i%s'));

如果您正在使用SQL Server,請使用Convert函數

 Declare  @VarCharDate  varchar(max)
 Declare  @VarCharDate1 varchar(max)

- 宣布

set  @VarCharDate = '20160125173013' --- YYYYMMDDHHMMSS

- 兌換

 set @VarCharDate1 =(select SUBSTRING(@VarCharDate,0,5) + '/' +
SUBSTRING(@VarCharDate,5,2)  + '/' + SUBSTRING(@VarCharDate,7,2)
  +  ' ' + SUBSTRING(@VarCharDate,9,2)
  +':'+SUBSTRING(@VarCharDate,11,2) +':' + RIGHT(@VarCharDate,2))

   select @VarCharDate1



 select  Convert(varchar(8),convert(datetime, @VarCharDate1, 120),114)

您有實際的DATETIME字段嗎? 如果是這樣,您可以使用DATE_FORMAT()

UPDATE mytable SET my_time=DATE_FORMAT(my_date, '%H:%i:%s')

如果您沒有本地DATETIME字段,我希望您可以將其轉換為一個,因為不規則,古怪的格式會帶來麻煩,並且在解析轉換時會帶來很多開銷。 STR_TO_DATE()可以執行與DATE_FORMAT()相反的操作,並將任意字符串轉換為本地DATEDATETIME值。

不要將存儲與演示相混淆

Declare @YourTable table (DateTime varchar(25),Time time)
Insert Into @YourTable values
('20160125173013',null)

Update @YourTable
   Set Time = stuff(left(right(DateTime,6),4),3,0,':')

Select * 
      ,FormatedTime = Format(cast(Time as datetime),'HH:mm')
 From @YourTable

退貨

DateTime        Time                FormatedTime
20160125173013  17:30:00.0000000    17:30

基於STUFF函數的使用,我相信這是Microsoft SQL Server,而不是MySql。 因此,您可以執行以下操作:

UPDATE db
SET [Time] = CAST(SUBSTRING([DATETIME], 9, 2) +':'+ 
                  SUBSTRING([DATETIME], 11, 2) +':'+ 
                  RIGHT([DATETIME], 2) As Time)
WHERE [Time] IS NULL

您的字符串沒有格式,SQL Server將隱式轉換

DECLARE @YourDateTimeString VARCHAR(100)='20160125173013';

以下查詢將剪切前8位數字並將其轉換為DATE ,這將隱式工作(不分隔格式)。 時間從右側減少,然后將兩個:符號填充到正確的位置:

SELECT CAST(LEFT(@YourDateTimeString,8) AS DATE)
      ,CAST(STUFF(STUFF(RIGHT(@YourDateTimeString,6),5,0,':'),3,0,':') AS TIME);

結果

2016-01-25  17:30:13.0000000

如果您需要將此字符串作為字符串而沒有尾隨.0000000這是一個純輸出格式問題,應該在表示層中完成! ),則可以使用LEFT() 該函數的輸入是字符串(同樣是隱式轉換的),輸出是看起來像time的文本

SELECT CAST(LEFT(@YourDateTimeString,8) AS DATE)
      ,LEFT(CAST(STUFF(STUFF(RIGHT(@YourDateTimeString,6),5,0,':'),3,0,':') AS TIME),8);

結果

2016-01-25  17:30:13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM