
[英]Is there a way to get CURRENT_TIMESTAMP in MySQL 8 in the format of YYYYMMDDHHMMSS instead of YYYY-MM-DD 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()
相反的操作,并将任意字符串转换为本地DATE
或DATETIME
值。
不要将存储与演示相混淆
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.