sql 模糊查询及正则式 方面

heavyrain1234 2017-08-15 01:03:16
我要查90%绒的,
我用
SELECT DISTINCT
wpsxlb1
FROM xtm12
WHERE wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\'
OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' )

这个方法只能查询9x%得,x是一位数,我想如果是98.5%绒 的这种怎么查询?
我想了一个办法:
SELECT DISTINCT wpsxlb37 FROM xtm12 WHERE wpsxlb37 LIKE '%9[0-9].[0-9]\%山羊绒' ESCAPE '\'
...全文
725 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2017-08-16
  • 打赏
  • 举报
回复
你这样写,是需要分开判断
二月十六 2017-08-16
  • 打赏
  • 举报
回复
如果数字前边还有其他的字符可以试试这个,如果还有其他数字,可能还有问题,建议把产品的属性单独做一个表,形成一个产品对应属性的一对多的关系:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] nvarchar(28))
Insert #T
select N'98%羊绒' union all
select N'98.5%山羊绒' union all
select N'99.1%山羊绒' union all
select N'灰色, size small 98.5%山羊绒' union all
select N'灰色, size small 89.5%山羊绒'
Go
--测试数据结束
SELECT *
FROM #T
WHERE col LIKE '%绒%'
AND CONVERT(FLOAT, SUBSTRING([col],
PATINDEX('%[^0-9|.][0-9|.]%', [col]) + 1,
PATINDEX('%[0-9][^0-9|.]%', [col])
- PATINDEX('%[^0-9|.][0-9]%', [col]))) > 90


shoppo0505 2017-08-16
  • 打赏
  • 举报
回复
引用 9 楼 z10843087 的回复:
[quote=引用 楼主 heavyrain1234 的回复:] 我要查90%绒的, 我用 SELECT DISTINCT wpsxlb1 FROM xtm12 WHERE wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\' OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' ) 这个方法只能查询9x%得,x是一位数,我想如果是98.5%绒 的这种怎么查询? 我想了一个办法: SELECT DISTINCT wpsxlb37 FROM xtm12 WHERE wpsxlb37 LIKE '%9[0-9].[0-9]\%山羊绒' ESCAPE '\'
强烈建议把98.5% 和 绒拆分成两个字段![/quote] +1 建议把百分比数和材料放入单独的列中
OwenZeng_DBA 2017-08-15
  • 打赏
  • 举报
回复
引用 楼主 heavyrain1234 的回复:
我要查90%绒的, 我用 SELECT DISTINCT wpsxlb1 FROM xtm12 WHERE wpsxlb37 LIKE '%100\%羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '%100\%羊绒' ESCAPE '\' OR wpsxlb37 LIKE '%100\%山羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '%100\%山羊绒' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%山羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%山羊绒' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%羊绒%' ESCAPE '\' OR wpsxlb37 LIKE '9[0-9]\%羊绒' ESCAPE '\' ) 这个方法只能查询9x%得,x是一位数,我想如果是98.5%绒 的这种怎么查询? 我想了一个办法: SELECT DISTINCT wpsxlb37 FROM xtm12 WHERE wpsxlb37 LIKE '%9[0-9].[0-9]\%山羊绒' ESCAPE '\'
强烈建议把98.5% 和 绒拆分成两个字段!
RINK_1 2017-08-15
  • 打赏
  • 举报
回复
SELECT * FROM 表 WHERE CAST(SUBSTRING(COL,PATINDEX('%[^0-9.][0-9.]%',COL)+1,PATINDEX('%[0-9.][^0-9.]%',COL)-PATINDEX('%[^0-9.][0-9.]%',COL)) AS NUMERIC(18,2))>90 AND COL LIKE '%!%%绒%' ESCAPE '!'
顺势而为1 2017-08-15
  • 打赏
  • 举报
回复
楼上两种写法都是假设 百分比在最前面, 如果百分比在字符串中间就做不到, 比如:灰色, size small 98.5%山羊绒
hongmei85 2017-08-15
  • 打赏
  • 举报
回复

if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([col] nvarchar(28))
Insert #T
select N'98%羊绒' union all
select N'98.5%山羊绒' union all
select N'99.1%山羊绒' union all
select N'89.1%山羊绒'
Go
--测试数据结束
SELECT  *
FROM    #T
WHERE   CONVERT(FLOAT, SUBSTRING([col], 0, charindex('%', [col]))) > 90
        AND col LIKE '%绒%'
  • 打赏
  • 举报
回复
oracle 支持正则表达式,sqlserver 只支持通配符
二月十六 2017-08-15
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([col] nvarchar(28))
Insert #T
select N'98%羊绒' union all
select N'98.5%山羊绒' union all
select N'99.1%山羊绒' union all
select N'89.1%山羊绒'
Go
--测试数据结束
SELECT *
FROM #T
WHERE CONVERT(FLOAT, SUBSTRING([col], 0,
PATINDEX('%[0-9][^0-9|.]%', [col]) + 1)) > 90
AND col LIKE '%绒%'


顺势而为1 2017-08-15
  • 打赏
  • 举报
回复
如果你经常要做这种统计, 那应将羊绒的百份比作为另一个字段分离出来
heavyrain1234 2017-08-15
  • 打赏
  • 举报
回复
比方说是91%,92%,96.5%如何查出来?
heavyrain1234 2017-08-15
  • 打赏
  • 举报
回复
我要查>90%绒的.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧