SUBSTRING、CHARINDEX、LEN等可以在2008的sql server中实现吗
时间: 2024-03-28 09:37:54 浏览: 32
是的,SUBSTRING、CHARINDEX、LEN等函数在 SQL Server 2008 中都是可用的,可以用于字符串的处理和分割。这些函数是 SQL Server 的基本函数,从 SQL Server 2000 开始就已经存在,因此在较老的版本中也是可用的。
以下是在 SQL Server 2008 中使用 SUBSTRING、CHARINDEX、LEN 函数实现字符串分割的示例:
DECLARE @String VARCHAR(100) = 'A,B,C,D,E'
DECLARE @Delimiter CHAR(1) = ','
DECLARE @Position INT
WHILE CHARINDEX(@Delimiter, @String) > 0
BEGIN
SELECT @Position = CHARINDEX(@Delimiter, @String)
SELECT SUBSTRING(@String, 1, @Position - 1) AS Part
SELECT @String = SUBSTRING(@String, @Position + 1, LEN(@String))
END
SELECT @String AS Part
这段代码与在较新版本的 SQL Server 中使用的代码是相同的。因此,如果您使用的是 SQL Server 2008,这些函数是可以满足您的需求的。
相关问题
sqlserver中SUBSTRING删除第一个逗号和第二个逗号之间的
假设字符串列名为`MyString`,可以使用以下SQL语句实现:
```
UPDATE MyTable
SET MyString = SUBSTRING(MyString, 1, CHARINDEX(',', MyString)) + SUBSTRING(MyString, CHARINDEX(',', MyString, CHARINDEX(',', MyString) + 1) + 1, LEN(MyString))
WHERE CHARINDEX(',', MyString, CHARINDEX(',', MyString) + 1) > 0
```
这个SQL语句的作用是将`MyTable`表中`MyString`列中第一个逗号和第二个逗号之间的部分删除,并将修改后的结果更新回`MyString`列中。要注意的是,该语句只对包含至少两个逗号的字符串起作用。如果字符串中只有一个逗号或没有逗号,则此语句不会修改该字符串。
使用SUBSTRING、CHARINDEX、LEN等函数,写一个sql server查询,不能使用string_split函数。在MeetItem20200119表中,JoinName列,MsterName列和MeetSummaryName列中有若干人员姓名且多个姓名之间用逗号隔开,统计这三列中每个名字的出现次数并把其在这三列的出现次数展示出来。
可以使用 SUBSTRING、CHARINDEX、LEN 等函数配合使用,编写 SQL 查询语句来实现该需求。具体实现方法如下:
```
SELECT Name, SUM(CASE WHEN JoinName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS JoinNameCount,
SUM(CASE WHEN MsterName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS MsterNameCount,
SUM(CASE WHEN MeetSummaryName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS MeetSummaryNameCount
FROM (
SELECT SUBSTRING(','+JoinName+',', Number+1, CHARINDEX(',', ','+JoinName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+JoinName+',')-1
UNION ALL
SELECT SUBSTRING(','+MsterName+',', Number+1, CHARINDEX(',', ','+MsterName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+MsterName+',')-1
UNION ALL
SELECT SUBSTRING(','+MeetSummaryName+',', Number+1, CHARINDEX(',', ','+MeetSummaryName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+MeetSummaryName+',')-1
) AS Names
GROUP BY Name
```
上述 SQL 查询语句首先使用了三个 UNION ALL 子句,将 JoinName、MsterName 和 MeetSummaryName 中所有的姓名拆分成单个的姓名,生成一个 Name 的临时表。
然后使用了 SUM、CASE WHEN 等函数,将每个姓名在三列中出现的次数统计出来,并分别计算出在 JoinName、MsterName 和 MeetSummaryName 列中的出现次数。
最后使用 GROUP BY 子句,将姓名进行分组,将每个姓名的出现次数展示出来。
需要注意的是,由于没有使用 string_split 函数,因此需要使用 CROSS JOIN master..spt_values 生成一个数字表,用于拆分字符串。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)