我尝试拆分此字符串3/9/1395 12:00:00 AM
并获取此字符串1395/9/3
。我搜索但是sql没有这项工作的方法。怎么做?
答案 0 :(得分:3)
您可以将变量转换为日期并获取年,月和日
DATEPART(YEAR,Cast('3/9/1395 12:00:00 AM' as date))
DATEPART(MONTH,Cast('3/9/1395 12:00:00 AM' as date))
DATEPART(DAY,Cast('3/9/1395 12:00:00 AM' as date))
答案 1 :(得分:2)
好的,这是一种真正的hacky方式,可以用于您需要拆分的日期值。有更简单的方法来回答这个特定的问题,因为它与日期有关,但对于一般的字符串拆分,你可以采用这种方法;
测试数据;
CREATE TABLE #TestData (OriginalString varchar(22))
INSERT INTO #TestData (OriginalString)
VALUES
('3/9/1395 12:00:00 AM')
,('10/9/1462 04:00:00 AM')
,('25/12/1900 15:00:00 PM')
,('3/11/1264 13:00:00 PM')
结果查询;
SELECT
OriginalString
,RIGHT(LEFT(OriginalString,CHARINDEX(' ',OriginalString,1)-1),4) + '/' + RIGHT(LEFT(OriginalString,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1)-1),LEN(LEFT(OriginalString,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1)-1))-CHARINDEX('/',OriginalString,1)) + '/' + LEFT(OriginalString,CHARINDEX('/',OriginalString,1)-1) Result
FROM #TestData
给出了这些结果;
OriginalString Result
3/9/1395 12:00:00 AM 1395/9/3
10/9/1462 04:00:00 AM 1462/9/10
25/12/1900 15:00:00 PM 1900/12/25
3/11/1264 13:00:00 PM 1264/11/3
为了得到这个结果,我逐个部分地构建了结果并从那里开始工作,如果你看看下面的查询,你可以看到我是如何得到这个答案的,如果你需要这样做,它可能对你有所帮助将来再次;
SELECT
OriginalString
,CHARINDEX('/',OriginalString,1) FirstSlashLocation
,LEFT(OriginalString,CHARINDEX('/',OriginalString,1)-1) FirstValue
,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1) SecondSlashLocation
,RIGHT(LEFT(OriginalString,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1)-1),LEN(LEFT(OriginalString,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1)-1))-CHARINDEX('/',OriginalString,1)) SecondValue
,CHARINDEX(' ',OriginalString,1) SpaceLocation
,RIGHT(LEFT(OriginalString,CHARINDEX(' ',OriginalString,1)-1),4) FinalValue
,RIGHT(LEFT(OriginalString,CHARINDEX(' ',OriginalString,1)-1),4) + '/' + RIGHT(LEFT(OriginalString,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1)-1),LEN(LEFT(OriginalString,CHARINDEX('/',OriginalString,CHARINDEX('/',OriginalString,1)+1)-1))-CHARINDEX('/',OriginalString,1)) + '/' + LEFT(OriginalString,CHARINDEX('/',OriginalString,1)-1) Result
FROM #TestData
给出了这些结果;
OriginalString FirstSlashLocation FirstValue SecondSlashLocation SecondValue SpaceLocation FinalValue Result
3/9/1395 12:00:00 AM 2 3 4 9 9 1395 1395/9/3
10/9/1462 04:00:00 AM 3 10 5 9 10 1462 1462/9/10
25/12/1900 15:00:00 PM 3 25 6 12 11 1900 1900/12/25
3/11/1264 13:00:00 PM 2 3 5 11 10 1264 1264/11/3
答案 2 :(得分:1)
如果您的列是日期,则可以使用
select CONVERT(VARCHAR(20),your_column , 110) from your_table
答案 3 :(得分:1)
如果你的DBMS是Sql Server(我想你的标题是你写的Tsql)
试试这个:
select
substring('3/9/1395 12:00:00 AM', 0,
charindex(' ', '3/9/1395 12:00:00 AM')
)
您的模式始终是日期空间时间,因此您将获得第一个空格位置(使用charindex
函数)并在字符串上应用substring
函数