SQL怎样取出字符串中的数字?

如图中所示,当型号规格为L=1200或L=1800时新增列“长度”取数值为1200或1800,当型号规格为1170*50*148或1200*64“长度”取数值为1170或1200已写语句如下:(以下语句新建的一个视图:A_SSBC 图为视图截图 )SELECT a.FDate, a.FCheckDate, b.FNumber, b.FName, d.FNote, b.FModel, c.FAuxQty AS 数量, b.F_114, b.F_114 * 0.0035 AS Expr1, c.FAuxQty * b.F_114 AS 入仓工时, c.FAuxQty * b.F_114 * 0.0035 AS 入仓奖金, d.FDeptID AS 生产车间, a.FBillNo AS 入库单号FROM dbo.ICStockBill AS a INNER JOIN dbo.ICStockBillEntry AS c ON a.FInterID = c.FInterID INNER JOIN dbo.vwICBill_2 AS d ON a.FInterID = d.FInterID INNER JOIN dbo.t_ICItem AS b ON c.FItemID = b.FItemIDWHERE (d.FDeptID = '装配(3F)') OR (d.FDeptID = '装配(2F)')

第1个回答  2018-08-14
select 
case when b.FModel like '%=%' then SUBSTRING(b.FModel, CHARINDEX('=',b.FModel)+1,LEN(b.FModel)-CHARINDEX('=',b.FModel)) 
     when b.FModel like '%*%' then SUBSTRING(b.FModel, 0,LEN(b.FModel)-CHARINDEX('*',b.FModel))
end as 长度

追问

加上说无效

追答

什么无效说清楚,我这边毕竟没有环境,没的调试都是盲打的

追问

直接把语句接上

追答

原来代码有错误,但只是逻辑错误,和你的报错应该无关。我代码的格式并无问题,执行也是正常返回的(如图)

select 

case when b.FModel like '%=%' then SUBSTRING(b.FModel, CHARINDEX('=',b.FModel)+1,LEN(b.FModel)-CHARINDEX('=',b.FModel)) 

when b.FModel like '%*%' then SUBSTRING(b.FModel, 0,CHARINDEX('*',b.FModel))

end as 长度

本回答被提问者采纳
第2个回答  2018-08-14

你这个处理的思路应该是匹配字符串中的数字哦!

请采用下面的方法:

匹配字符串中的数字

主要是使用正则表达式匹配字符串中的[0-9]的数字,请看一看并测试,如有疑问,及时沟通!

第3个回答  2018-08-14
SELECT 型号规格,
CASE   型号规格 
WHEN 'L=1200' THEN 1200
WHEN 'L=1800' THEN 1800
WHEN '1170*50*148' THEN 1170
WHEN '1200*64' THEN 1200 
ELSE 0
END AS 长度
FROM XXX

第4个回答  2018-08-14
-- 用case试试
SELECT a.FDate,
       a.FCheckDate,
       b.FNumber,
       b.FName,
       d.FNote,
       CASE WHEN CHARINDEX('L',b.FModel)>0 THEN  SUBSTRING(b.FModel,3,LEN(b.FModel)) when CHARINDEX('*',b.FModel)>0 then left(b.FModel,CHARINDEX('*',b.FModel)-1) as FModel,
       c.FAuxQty AS 数量,
       b.F_114,
       b.F_114 * 0.0035 AS Expr1,
       c.FAuxQty * b.F_114 AS 入仓工时,
       c.FAuxQty * b.F_114 * 0.0035 AS 入仓奖金,
       d.FDeptID AS 生产车间,
       a.FBillNo AS 入库单号FROM dbo.ICStockBill AS a INNER JOIN dbo.ICStockBillEntry AS c ON a.FInterID = c.FInterID INNER JOIN dbo.vwICBill_2 AS d ON a.FInterID = d.FInterID INNER JOIN dbo.t_ICItem AS b ON c.FItemID = b.FItemIDWHERE(d.FDeptID = '装配(3F)') OR (d.FDeptID = '装配(2F)')

SQL怎么取字符串中的数字
4、编写语句,取字符串中的数字;select t.*, regexp_replace(v_str,'\\D','') v_str2 from test_str t;

SQL怎样取出字符串中的数字?
select case when b.FModel like '%=%' then SUBSTRING(b.FModel, CHARINDEX('=',b.FModel)+1,LEN(b.FModel)-CHARINDEX('=',b.FModel)) when b.FModel like '%*%' then SUBSTRING(b.FModel, 0,LEN(b.FModel)-CHARINDEX('*',b.FModel))end as 长度 ...

SQL怎么取字符串中的数字
比如你的表叫作TALBE1,字段是str1,类型为nvarchar,那么找出有湘政发的最大号加1这样写 select max(convert(int,substring(str1,patindex(N'%[1234567890]%',str1),len(str1)-patindex(N'%[1234567890]%',str1)+1-patindex(N'%[1234567890]%',reverse(str1))+1)))+1 from table1 where...

sql怎么截取一个字符串中的数字,然后和另一个数进行比较。
select substring(colName,charindex('(',colName)+1,4)把1992拿出来,对比也就用这个计算方法对比吧,如 where convert(int,substring(colName,charindex('(',colName)+1,4))<2009

sql怎么取字符串的前几位(sql取字符串中间几位)
sql中,使用LEFT函数即可取到字符串的前几位。LEFT(c,number_of_char)用于返回某个被请求的文本域的左侧部分,其中c代表被请求的文本域,number_of_cha代表需要取出的字符串位数。如“LEFT(".",6)”即可取得字符串""。

SQL中如何从字符串中取值。
charindex(')',select 字段名 from 表名 where id=1))-charindex('(',select 字段名 from 表名 where id=1)))就是两个函数 substring("1231",1,2) ="12" 1起始位置 2截取长度 charindex('(','ab(cd')=3 获取在字段'ab(cd' 中‘(’字符在字符串中的索引位置 ...

sql如何获取字符串中的指定字符
3、查询表中全量数据,select t.*, rowid from test_int t;4、编写sql,获取字符串中的指定字符;select t.*,case when instr(value, 'd=') = 0 then null else substr(value,instr(value, 'd='),case when instr(value, '&') = 0 then 10 else instr(value, '&') - instr(value...

SQL怎样取出字符串中的数字?
如果只有两种情况,可以分开来考虑 select case when left(规格型号,1)='L' then substring(规格型号,3,len(规格型号)-2)when charindex(规格型号,'*',1)>0 then substring(规格型号,1,charindex(规格型号,'*',1)-1)else ""end 规格 from 表 ...

sql如何截取字符串中前面的数字
如果提取字符串中的数字,需要自定义函数,以下函数包含截取字符串中的数字、字母、汉字等。create function fn_myget(@str as varchar(max),@category as varchar(10)='Chinese',@start as int=1,@end as int=100000)returns varchar(max)asbegin declare @i int=@start declare @lenstr int=len...

怎样在SQL中把一列中的数字提取出来
一条记录时采用以下方法:使用PATINDEX函数找出字符串中第一次出现数字的位置 declare @aa varchar(80),---INFO列 bb varchar(80)set @aa ='你好12按时地方'set @bb=''while PATINDEX('%[0-9]%',@aa)<>0 \/*每次循环找出一个数字*\/ begin set @bb = @bb+substring...

相似回答