如何解决分割句子并在sql中仅选择所需的字符串
我的表中有一个名为billing_cycle的列,该列仅包含下面给出的两个字符串,我只需要从该字符串中检索每月和每季度。
使用以下查询,我可以按季度正确获取字符串,但不能按月获取字符串。在输出中,单词A与字符串Monthly重叠。可以使用case和stuff命令替换它,但我不想使用它们。我想使用输出 子字符串和charindex或任何其他函数。
SELECT substring('208-Billing Period - Quarterly Average Daily Balance',charindex('- ','208-Billing Period - Quarterly Average Daily Balance') + 2,9)
SELECT substring('210-Billing Period - Monthly Average Daily Balance','210-Billing Period - Monthly Average Daily Balance') + 2,9)
有人可以帮助我吗?
解决方法
一个方法是几个嵌套的CHARINDEX
函数。我这样做是FROM
,因为它避免了重复表达式:
SELECT SUBSTRING(V.YourColumn,CI1.I,CI2.I - CI1.I)
FROM (VALUES('208-Billing Period - Quarterly Average Daily Balance'),('210-Billing Period - Monthly Average Daily Balance'))V(YourColumn)
CROSS APPLY (VALUES(CHARINDEX('- ',V.YourColumn)+2))CI1(I)
CROSS APPLY (VALUES(CHARINDEX(' ',V.YourColumn,CI1.I)))CI2(I);
,
我建议您使用 {
"data" : [
{
"L_PHONE_NUMBER" : "bb","L_DELETED" : "","UID" : 1,"L_ADDRESS" : "addressb","L_NIGHT_HOURS_TO" : "","L_ACCOUNT_ID" : "225235743","L_NIGHT_HOURS_FROM" : "","L_DEALER_ID" : "","L_BRANCH_NAME" : "Branch 1b","L_ID" : "arbvgBwzNc","L_REGION_ID" : "","L_JOB_DELAY" : "bb"
},{
"L_PHONE_NUMBER" : "8885577910","UID" : 2,"L_ADDRESS" : "640 S Hathaway St,Santa Ana,CA 92705","L_NIGHT_HOURS_TO" : "12:00:00","L_ACCOUNT_ID" : "syWESGISHx","L_NIGHT_HOURS_FROM" : "00:00:00","L_DEALER_ID" : "QvUuWqPhRG","L_BRANCH_NAME" : "Santa Ana,S Hathaway St","L_ID" : "Dmx3ma5dnI","L_JOB_DELAY" : "15"
},{
"L_PHONE_NUMBER" : "(310)-541-6110","UID" : 4,"L_ADDRESS" : "745 W La Cadena Dr,Riverside CA 925012","L_NIGHT_HOURS_TO" : "00:00:00","L_NIGHT_HOURS_FROM" : "12:00:00","L_DEALER_ID" : "cDsUw0Bl44","L_BRANCH_NAME" : "Riverside Branch222","L_ID" : "M3Y9FVnRAm","L_JOB_DELAY" : "10"
},{
"L_PHONE_NUMBER" : "(310)555-6667","UID" : 5,"L_ADDRESS" : "640 S Hawasqy St,Sala mana,FA 3123123","L_DEALER_ID" : "ePtEH1ClEu","L_BRANCH_NAME" : "Luis's Branch","L_ID" : "5i3u4YubdJ","L_JOB_DELAY" : ""
},{
"L_PHONE_NUMBER" : "123","UID" : 7,"L_ADDRESS" : "nope","L_NIGHT_HOURS_TO" : "11:00:00","L_ACCOUNT_ID" : "","L_NIGHT_HOURS_FROM" : "10:00:00","L_BRANCH_NAME" : "test","L_ID" : "","UID" : 9,"UID" : 11,"L_BRANCH_NAME" : "","UID" : 12,"UID" : 14,"L_BRANCH_NAME" : "name","UID" : 15,"L_JOB_DELAY" : ""
}
],"offset" : 0,"size" : 15,"dataSet" : {
"localization" : { },"code" : "123123123","name" : "3213213123","lastChange" : "Thu,20 Aug 2020 14:18:57 GMT","id" : "7"
}
}
和like
来简化此操作,这样就不必将特定的位置值硬编码到case
substring
结果:
,使用CASE / LIKE等要容易得多,但是由于您将不使用它们(这是一项家庭作业吗?),而不是在substring()末尾添加9,您将不得不使用该位置-季度或每月一词后的下一个空格。我还留下了一些其他专栏来帮助您理解它。
declare @test table
(
ID int identity(1,1),Billing varchar(100)
)
insert into @test(Billing)
select '208-Billing Period - Quarterly Average Daily Balance' UNION
select '210-Billing Period - Monthly Average Daily Balance'
select *,charindex('- ',Billing) + 2 position_of_first_dash,substring(Billing,Billing) + 2,LEN(Billing)) substring_from_first_dash_pos_plus_2,charindex(' ',LEN(Billing))) pos_first_space_after_dash_word,LEN(Billing)))-1 )
from
@test
返回的结果是:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。