Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过Tsql拆分一段字符串?_Sql_Sql Server_String_Tsql - Fatal编程技术网

如何通过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