我們都知道,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 是字串 二...