如何通过Tsql拆分一段字符串?
我尝试拆分此字符串如何通过Tsql拆分一段字符串?,sql,sql-server,string,tsql,Sql,Sql Server,String,Tsql,我尝试拆分此字符串3/9/1395 12:00:00 AM,并获取此字符串1395/9/3。我进行了搜索,但sql没有用于此工作的方法。如何做到这一点?如果列是可以使用的日期 select CONVERT(VARCHAR(20),your_column , 110) from your_table 如果您的DBMS是Sql Server(我想是因为您在标题中写了Tsql) 试试这个: select substring('3/9/1395 12:00:00 AM', 0,
3/9/1395 12:00:00 AM
,并获取此字符串1395/9/3
。我进行了搜索,但sql没有用于此工作的方法。如何做到这一点?如果列是可以使用的日期
select CONVERT(VARCHAR(20),your_column , 110) from your_table
如果您的DBMS是Sql Server(我想是因为您在标题中写了Tsql) 试试这个:
select
substring('3/9/1395 12:00:00 AM', 0,
charindex(' ', '3/9/1395 12:00:00 AM')
)
您的模式始终是日期-空间-时间,因此您将获得第一个空间位置(使用
charindex
函数),并且在字符串上应用子字符串
函数您可以将变量转换为日期并获得年、月和日
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))
好的,这是一种非常粗糙的方法,适用于不需要拆分日期的值。有更简单的方法来回答这个特殊的问题,因为它与日期有关,但对于一般的字符串拆分,您可以采用这种方法 试验数据
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
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
为了得到这个结果,我一部分一部分地构建了结果并从那里开始工作,如果你看看下面的查询,你可以看到我是如何得到这个答案的,如果你以后需要再次这样做,它可能会帮助你
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 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
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
我想您的数据库管理系统是Sql Server,对吗?不同的数据库将以不同的方式处理此问题。例如,您使用的是Microsoft SQL Server、MySQL还是Oracle?一旦我们知道您使用的系统,它将帮助您获得更好的答案此返回3/9/1395,但我希望获得1395/9/3