select col_type
from table_name
lateral view explode(split(col,',')) t as col_type
代码如下:eclare @str nvarchar(50);set @str=’462,464,2′;select @str as ‘字符串’select len(@str) as ‘字符长度’select charindex(‘,’,@str,1) as ‘第一个逗号的索引值’select LEFT(@str,charindex(‘,’,@str,1)-1) as ‘第一个值’select SUBSTRING(@str,charindex(‘,’,@str,1)+1,len(@str)) as ‘从第一逗号开始截取出后面的字符串’select LEFT(SUBSTRING(@str,char
1、sql创建函数
CREATE FUNCTION [dbo].[fn_split](@p_str NVARCHAR(MAX), @p_split NVARCHAR(20))
RETURNS @tab TABLE(tid NVARCHAR(2000))
BEGIN
DECLARE @idx INT
DECLARE @len INT
SELECT @len = LEN(@p_split), @idx = CHARINDEX(@p_split, @p_str, 1)
WHILE(@idx >= 1)
一、概述:
MSSQL字符串的拆分没有封装太多常用的方式,所以如果向数据库中插入用特殊字符分割字符串(比如CB0$CB2$CB3,CB0$CB2$CB3)时就可能需要数据库能够分割字符串,SQL中拆分字符串的常用方法有
1、len(@strname) :查询字符串的长度
2、charindex('$',@strname,1) :查询特殊字符存在的位置index
3、substring(@s...
SQL分割字符串函数
SQL里类似Split的
分割字符串函数
SQL对
字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的
字符串,如果用数组的话,遍历很简单,但是T-
SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理
字符串。
一.用临时表作为数组
str:需要
拆分的
字符串;
delim:
分隔符,根据此字符来
拆分字符串;
count:当 count 为正数,取第 n 个
分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个
分隔符之后的所有字符
– 》str=’ 金融业企业-银行业存款类金融机构-国家开发银行及政策性银行’
–> 1 substring_index(str,’-’,1)
–>得到 金融业企业 由于是取第一个 - 之前的所有字符
--方法一
SELECT d.dept_name,wm_concat(e.emp_name) FROM employee e
INNER JOIN department d ON d.dept_id=e.dept_id
GROUP BY d.dept_name;
执行结果:
DECLARE @id VARCHAR(200)
DECLARE @idlist VARCHAR(500) = '1,2,3,5,6,8,9,10,11,12,14,15,16,17,18,19,20'
WHILE LEN(@idlist) > 0
BEGIN
IF CHARINDEX(',',@idlist) > 0
SET @id = SUBSTRING(@idlist,0,CHARINDEX(',',@idlist))
BEGIN
SQL分割字符串详解
T-
SQL对
字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的
字符串,如果用数组的话,遍历很简单,但是T-
SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理
字符串。
一,用临时表作为数组。
SQL Server 中可以使用内置函数 `PARSE` 或者 `STRING_SPLIT` 来实现分隔字符串。
例如,要将字符串 "A,B,C,D" 按照 "," 进行分隔,可以使用以下代码:
SELECT value
FROM STRING_SPLIT('A,B,C,D', ',')
也可以使用 `PARSE` 函数,例如:
DECLARE @str nvarchar(50) = 'A,B,C,D';
WITH split (start, [end], value) AS
SELECT 1, CHARINDEX(',', @str),
SUBSTRING(@str, 1, CHARINDEX(',', @str) - 1)
UNION ALL
SELECT [end] + 1, CHARINDEX(',', @str, [end] + 1),
SUBSTRING(@str, [end] + 1, CHARINDEX(',', @str, [end] + 1) - [end] - 1)
FROM split
WHERE [end] > 0
SELECT value
FROM split;
这两种方法都可以用来分隔字符串,您可以根据实际情况选择使用。