替换或修剪SQL中的字符串
我非常擅长SQL,但我已经有一段时间没这么做了 我有一个带有公共字符串的简单表:替换或修剪SQL中的字符串,sql,string,Sql,String,我非常擅长SQL,但我已经有一段时间没这么做了 我有一个带有公共字符串的简单表: TableName = ExampleTable1 ColumnName = ExampleColumn1 我有这样一个字符串: MYSTRING_10_TB_EXAMPLE1 MYSTRING_120_TB_EXAMPLE2 DECLARE @tbl TABLE(aString VARCHAR(100)); INSERT INTO @tbl VALUES('MYSTRING_10_TB_EXAMPLE1')
TableName = ExampleTable1
ColumnName = ExampleColumn1
我有这样一个字符串:
MYSTRING_10_TB_EXAMPLE1
MYSTRING_120_TB_EXAMPLE2
DECLARE @tbl TABLE(aString VARCHAR(100));
INSERT INTO @tbl VALUES('MYSTRING_10_TB_EXAMPLE1')
,('MYSTRING_120_TB_EXAMPLE2');
WITH Splitted AS
(
SELECT CAST('<x>' + REPLACE(aString,'_','</x><x>') + '</x>' AS XML) AS SingleWords
FROM @tbl
)
SELECT SingleWords.value('x[1]','varchar(max)') AS part1
,SingleWords.value('x[2]','int') AS part2
,SingleWords.value('x[3]','varchar(max)') AS part3
,SingleWords.value('x[4]','varchar(max)') AS part4
FROM Splitted
/* Result
part1 part2 part3 part4
MYSTRING 10 TB EXAMPLE1
MYSTRING 120 TB EXAMPLE2
*/
我有一个疑问:
select ExampleColumn1, replace(ExampleColumn1,'MYSTRING_', '') from ExampleTable1
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX('MYSTRING_120_TB_EXAMPLE2','_',2),
'_', -1);
这只返回字符串开头的数字:
"10_TB_EXAMPLE1"
我现在需要删除整数后面第一个破折号后面的字符串。整数可以是一位数字,也可以是四位或五位数字,但我需要所有内容,包括第一个u-remove或任何以_-TB开头的内容,以便只返回整数
我知道你可以用东西来替换。我想我需要用另一个替换替换查询中的第三个参数,或者是对的
我在这里尝试了很多方法,但我不能在第一个符号后修剪整个字符串,只留下整数。您可以将字符串拆分为多个部分,然后继续执行您想要的任何操作。试着这样做:
MYSTRING_10_TB_EXAMPLE1
MYSTRING_120_TB_EXAMPLE2
DECLARE @tbl TABLE(aString VARCHAR(100));
INSERT INTO @tbl VALUES('MYSTRING_10_TB_EXAMPLE1')
,('MYSTRING_120_TB_EXAMPLE2');
WITH Splitted AS
(
SELECT CAST('<x>' + REPLACE(aString,'_','</x><x>') + '</x>' AS XML) AS SingleWords
FROM @tbl
)
SELECT SingleWords.value('x[1]','varchar(max)') AS part1
,SingleWords.value('x[2]','int') AS part2
,SingleWords.value('x[3]','varchar(max)') AS part3
,SingleWords.value('x[4]','varchar(max)') AS part4
FROM Splitted
/* Result
part1 part2 part3 part4
MYSTRING 10 TB EXAMPLE1
MYSTRING 120 TB EXAMPLE2
*/
只是一个简短的解释:下划线替换为。开头是开始,结尾是结束,这就是XML。每个节点都可以通过其索引寻址。就是这样…使用子字符串索引函数。
此查询:
select ExampleColumn1, replace(ExampleColumn1,'MYSTRING_', '') from ExampleTable1
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX('MYSTRING_120_TB_EXAMPLE2','_',2),
'_', -1);
将返回120使用REPLACE修剪字符串的第一部分,就像您已经做的那样
使用CHARINDEX在结果字符串中查找第一个字符串的位置_
然后使用LEFT仅保留字符串的左侧部分,但不包括第一部分_
会回来吗
MYSTRING_10_TB_EXAMPLE1 10
MYSTRING_120_TB_EXAMPLE2 120
如果您使用的是mySql而不是CHARINDEX,请使用LOCATE:
看看子字符串函数。顺便说一句,请使用标记来格式化您的问题,例如将代码放入代码标记中等,以使其更具可读性。Chris,正如您所见,陈述RDBMS非常重要。一个是MySQL,另一个是SQL Server。请编辑您的问题并说明正确的标签,谢谢!嗨,很抱歉。子字符串不是一定数量的字符吗?那么您使用的是哪种DBMS?博士后?甲骨文?嗨,克里斯,因为你是新来的,所以,请注意,在这里给出答案的专业人士渴望获得声誉积分。请仔细阅读答案,如果有帮助,请投票表决。如果其中一个帮助您解决了问题,您应该将其标记为已接受的答案,谢谢!据我所知,MySQL中没有STUFF函数。当OP提到这个函数时,我想问题在于SQL Server。。。这是为了让OP澄清。。。