select
case when charindex('-',t.str)=0 then null
else reverse(stuff(reverse(str),1,charindex('-',reverse(str)),''))
end as newstr
from
(select '[1]-[2]-[3]-[4]-[5]' as str union select '[2]-[5]-[1]' union select '[2]') t/*
newstr
--------------------
[1]-[2]-[3]-[4]
NULL
[2]-[5]
*/
case when charindex('-',t.str)=0 then null
else reverse(stuff(reverse(str),1,charindex('-',reverse(str)),''))
end as newstr
from
(select '[1]-[2]-[3]-[4]-[5]' as str union select '[2]-[5]-[1]' union select '[2]') t/*
newstr
--------------------
[1]-[2]-[3]-[4]
NULL
[2]-[5]
*/
解决方案 »
- transact-sql语言基础中,‘{}’大括号是指什么意思的?
- 为什么我在master库中执行 print OBJECTPROPERTY(object_id(N'[moneyex].[DBO].[TEST]'), N'IsUserTable'),返回总为0
- 高手帮忙看看这个SQL语句那里错误
- 求日期SQL
- sql如何随机取数
- 还原数据库时报112错误,如何解决,望高手指点!
- SQL紧急求教
- 数据库问题
- 能不能用标准的SQL语句, 使清除一张表的数据时,该表的所有外键关联都暂时失效
- 能否让查询分析器显示比秒更小的(执行SQL语句所占用)时间单位?
- 求sql 想在一个表中查询某个字段连续N条记录是连续+1的第一条记录
- 怎么删除指定其中一个字符后的所有字符
--> 测试时间:2009-07-09 17:28:30
--> 我的淘宝: http://shop36766744.taobao.com/if object_id('[tab]') is not null drop table [tab]
create table [tab]([A] varchar(19))
insert [tab]
select '[1]-[2]-[3]-[4]-[5]' union all
select '[2]-[5]-[1]' union all
select '[2]'select case when charindex('-',A)>0 then left(A,len(A)-charindex('-',REVERSE(A))) else null end from [tab] /*
-------------------
[1]-[2]-[3]-[4]
[2]-[5]
NULL(所影响的行数为 3 行)
*/drop table tab
(NAME VARCHAR(20))
INSERT INTO @tab
SELECT '[1]-[2]-[3]-[4]-[5]' UNION ALL
SELECT '[2]-[5]-[1]' UNION ALL
SELECT '[2]'SELECT
CASE WHEN CHARINDEX('-',NAME) = 0 THEN NULL ELSE
REVERSE(SUBSTRING(REVERSE(NAME),CHARINDEX('-',REVERSE(NAME)) +1,
LEN(NAME) - CHARINDEX('-',REVERSE(NAME)) + 1)) END
FROM @tab--------------------
[1]-[2]-[3]-[4]
[2]-[5]
NULL(3 行受影响)