如何用SQL動態擷取字串的長度

2021-04-16 19:44:20 字數 1212 閱讀 4877

我們都知道,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

endreturn (@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

sql 擷取字串

sql 擷取字串 a.擷取從字串左邊開始n個字元 declare s1 varchar 100 select s1 select left s1,4 顯示結果 http b.擷取從字串右邊開始n個字元 例如取字元www.163.com declare s1 varchar 100 select s1...

SQL擷取字串

substring 返回字元 binary text 或 image 抒發式的一全體。無關可與當函式一伏運用的無效 microsoft sql server 資料種型的更多疑息,請參睹資料種型。語法 substring expression start length 引數 expression 是字...

SQL擷取字串

substring 返回字元 binary text 或image 表示式的一部分。有關可與該函式一起使用的有效 microsoft sql server 資料型別的更多資訊,請參見資料型別。語法substring expression start length 引數expression 是字串 二...