您的位置:首页 > 数据库

如何用SQL动态截取字符串的长度?

2008-04-15 12:58 447 查看
我们都知道,SQL截取字符串的固定长度,可以有Sub()函数,Rigth()函数,或者Left()函数.如果截取的字符串是动态的一个字段,那么显然,以上3个函数是不适用的.那么如何动态的截取字符串的长度呢?

比如: 一个表里面有这么ValidDate字段,它的数据是这样的形式插进去的, 1,年; 2,年;6,月;12,月;120,天;180,天;

ValidDate 的数据是由左边的数值,中间的分隔符和右边的单位组成的.而且左边的数值为1,2,3位数.那么这种情况我们如何来截取左边的动态的数值呢?

以下方法探讨这样的一个思路: 可以先写一个方法:

CREATE FUNCTION FUN_GETNumChar (@InString VarChar(100))

RETURNS VarChar(100) AS

BEGIN
DECLARE @RetString VarChar(100)

SET @RetString = RTRIM(LTRIM(@InString))

WHILE LEN(@RetString) > 0
BEGIN
IF RIGHT(@RetString, 1) NOT IN('0','1','2','3','4','5','6','7','8','9')
SET @RetString = SUBSTRING(@RetString, 1, LEN(@RetString) - 1)
ELSE
BREAK
END
RETURN (@RetString)
END

然后在数据库内执行编译一下..编译完成后,在所需用到的SQL里面引用此方法:

如以上述所说的ValidDate 字段为例:

CONVERT(CHAR(10), CASE RIGHT(VALID_DATE, 1)
WHEN '年' THEN DATEADD(YEAR, CAST(DBO.FUN_GETNumChar(VALID_DATE) AS INT), PRODUCE_DATE)
WHEN '月' THEN DATEADD(MONTH, CAST(DBO.FUN_GETNumChar(VALID_DATE) AS INT), RODUCE_DATE)
WHEN '日' THEN DATEADD(DAY, CAST(DBO.FUN_GETNumChar(VALID_DATE) AS INT), PRODUCE_DATE) END, 120) AS VALIDTIME
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: