sql-server-2008 – 如何在SQL Server 2008中对字符串值进行子串
发布时间:2020-05-23 07:38:01 所属栏目:MsSql 来源:互联网
导读:我有以下字符串 KLPI_2012_CBBE2_E_12704_2012-09-21_13_59_52IYT_2012_CBBI1_S_66_2012-09-21_15_28_53 我想在第一个_之后提取所有内容.在5日之前_ 例如: 2012_CBBE2_E_12704 2012_CBBI1_S_66 方法1.嵌套的CHARINDEX调用. 使用CHARINDEX(‘_’,stringva
|
我有以下字符串 KLPI_2012_CBBE2_E_12704_2012-09-21_13_59_52 IYT_2012_CBBI1_S_66_2012-09-21_15_28_53 我想在第一个_&之后提取所有内容.在5日之前_ 例如: 2012_CBBE2_E_12704 2012_CBBI1_S_66 解决方法方法1.嵌套的CHARINDEX调用.使用CHARINDEX(‘_’,stringvalue)获取stringvalue中第一个_的位置.如果您将该位置作为第三个参数传递,则可以指示CHARINDEX从某个位置开始搜索: CHARINDEX(`_`,stringvalue,startpos) 现在,如果起始位置是CHARINDEX(‘_’,stringvalue)1的结果,即如下: CHARINDEX(`_`,CHARINDEX(`_`,stringvalue) + 1) 然后那会给你第二个_的位置.所以,要找到第五个_,你需要再多次嵌套CHARINDEX: WITH aTable AS (
SELECT
*
FROM
(VALUES
('KLPI_2012_CBBE2_E_12704_2012-09-21_13_59_52'),('IYT_2012_CBBI1_S_66_2012-09-21_15_28_53')
) AS v (aStringColumn)
),positions AS (
SELECT
aStringColumn,Underscore1 = CHARINDEX('_',aStringColumn),Underscore5 = CHARINDEX('_',aStringColumn,CHARINDEX('_',aStringColumn
) + 1
) + 1
) + 1
) + 1
)
FROM
aTable
)
SELECT
aSubstring = SUBSTRING(aStringColumn,Underscore1 + 1,Underscore5 - Underscore1 - 1
)
FROM
positions
;
方法2.字符拆分排名. >使用numbers table将每个字符串拆分为单个字符,沿途拉出它们的位置. 1)用字符_和排名1; 2)用字符_和排名5. 相互加入这些子集. WITH aTable AS (
SELECT
*
FROM
(VALUES
('KLPI_2012_CBBE2_E_12704_2012-09-21_13_59_52'),split AS (
SELECT
t.aStringColumn,aChar = SUBSTRING(t.aStringColumn,n.Number,1),Position = n.Number
FROM
aTable t
INNER JOIN Numbers n
ON n.Number BETWEEN 1 AND LEN(t.aStringColumn)
),ranked AS (
SELECT
*,rnk = ROW_NUMBER() OVER (PARTITION BY aStringColumn,aChar ORDER BY Position)
FROM
split
WHERE
aChar = '_'
)
SELECT
aSubstring = SUBSTRING(first.aStringColumn,first.Position + 1,fifth.Position - first.Position - 1
)
FROM
ranked first
INNER JOIN ranked fifth
ON first.aStringColumn = fifth.aStringColumn
WHERE
first.rnk = 1
AND fifth.rnk = 5
;
注意:两种方法都假定每个aStringColumn值至少有5个下划线字符. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 在LEFT JOIN和WHERE中计数
- 如何优化Mysql千万级快速分页
- SQL Server 同一个sql语句 连接两个数据库服务器
- sql-server – SQL Server 2000:有没有办法告诉记录上次修
- sql-server – 我应该创建使用数据库图表所需的支持对象吗?
- sql – 在VS 2017中创建的SSRS备份文件
- 数据库无法将django app部署到amazon beanstalk
- SQL Server ROW_NUMBER SQL Server 2005的LIMIT功能实现(RO
- JCR SQL2多值属性搜索
- sql-server – 如何在D7中解码XML Blob字段
