请教大侠个问题,急用

sstgaps 2012-07-10 02:31:53
我有一个字段保存的是 001-023,014-089 之类的文本值(可以为空),现在要用中间的 025 查找去得到符合条件的行,SQL要怎么写?
...全文
120 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
筱筱澄 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

牛,个个都是牛人
fredrickhu 方法最好又简单
[/Quote]
好到哪里了
sstgaps 2012-07-10
  • 打赏
  • 举报
回复
牛,个个都是牛人
fredrickhu 方法最好又简单
天-笑 2012-07-10
  • 打赏
  • 举报
回复


declare @t table (
id int not null,
Num varchar(8) not null
)

insert into @t
select 1, '001-023' union all
select 2, '024-089' union all
select 3, '090-100'

declare @n varchar(4)
set @n = '025'
select * from @t
where @n>=left(num,charindex('-',num)-1) and @n<=right(num,len(num)-charindex('-',num))
筱筱澄 2012-07-10
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[NUM] VARCHAR(7))
INSERT [tb]
SELECT 1,'001-023' UNION ALL
SELECT 2,'024-089' UNION ALL
SELECT 3,'090-100'
--------------开始查询--------------------------
DECLARE @i VARCHAR(10)
SET @i='025'
SELECT * FROM
(
SELECT * FROM [tb] WHERE CHARINDEX('-',[NUM])>0--先查询出来包含有-的,如果数据都包含有这个,则不需要这一步
)
t WHERE @i BETWEEN LEFT([NUM],CHARINDEX('-',[NUM])-1) AND RIGHT([NUM],CHARINDEX('-',[NUM])-1)

----------------结果----------------------------
/*
ID NUM
----------- -------
2 024-089

(1 行受影响)


*/
--小F-- 2012-07-10
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2012-07-10 14:48:37
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (Intel X86)
-- Apr 22 2011 11:57:00
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X64> (Build 7600: ) (WOW64)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[NUM] varchar(7))
insert [tb]
select 1,'001-023' union all
select 2,'024-089' union all
select 3,'090-100'
--------------开始查询--------------------------
declare @num varchar(10)
set @num='025'
select id from tb where @num between parsename(replace(num,'-','.'),2) and parsename(replace(num,'-','.'),1)

----------------结果----------------------------
/* id
-----------
2

(1 行受影响)
*/
筱筱澄 2012-07-10
  • 打赏
  • 举报
回复
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[NUM] VARCHAR(7))
INSERT [tb]
SELECT 1,'001-023' UNION ALL
SELECT 2,'024-089' UNION ALL
SELECT 3,'090-100'
--------------开始查询--------------------------
DECLARE @i VARCHAR(10)
SET @i='025'
SELECT * FROM [tb] WHERE @i BETWEEN LEFT([NUM],CHARINDEX('-',[NUM])-1) AND RIGHT([NUM],CHARINDEX('-',[NUM])-1)
----------------结果----------------------------
/*
ID NUM
----------- -------
2 024-089

(1 行受影响)


*/
--小F-- 2012-07-10
  • 打赏
  • 举报
回复

declare @num varchar(10)
set @num='025'
select id from tb where @num between parsename(replace(num,'-','.'),2) and parsename(replace(num,'-','.'),1)
xuam 2012-07-10
  • 打赏
  • 举报
回复
那需要先拆列.
[Quote=引用 6 楼 的回复:]
024-089 是表示024 到089 包含中间的值
[/Quote]
Felixzhaowenzhong 2012-07-10
  • 打赏
  • 举报
回复
select * from tb where charindex('-025-','-'+COL+'-')>0
天-笑 2012-07-10
  • 打赏
  • 举报
回复
NUM='024' 吧?
xuam 2012-07-10
  • 打赏
  • 举报
回复
用条件 NUM='025' 去查询得到 ID=2
????不知道怎么查....
[Quote=引用 2 楼 的回复:]
补充:表结构为
ID NUM
1 001-023
2 024-089
3 090-100
现在用条件 NUM='025' 去查询得到 ID=2
SQL怎么写?
[/Quote]
sstgaps 2012-07-10
  • 打赏
  • 举报
回复
024-089 是表示024 到089 包含中间的值
sstgaps 2012-07-10
  • 打赏
  • 举报
回复
就是输入的
--小F-- 2012-07-10
  • 打赏
  • 举报
回复
那个NUM='025’是怎么来的?
筱筱澄 2012-07-10
  • 打赏
  • 举报
回复
没看到查询条件是什么
sstgaps 2012-07-10
  • 打赏
  • 举报
回复
补充:表结构为
ID NUM
1 001-023
2 024-089
3 090-100
现在用条件 NUM='025' 去查询得到 ID=2
SQL怎么写?
xuam 2012-07-10
  • 打赏
  • 举报
回复
charindex()

22,210

社区成员

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

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