程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 深度發掘SQLServer2000UDF(下)

深度發掘SQLServer2000UDF(下)

編輯:關於SqlServer
 大小寫轉換函數
  
  該函數有兩個參數:@String和@Capitalize_What。
  
  依據 @Capitalize_What的值,函數有不同的功能:
  
  ¨ @Capitalize_What = ‘string’“
  
  函數將 @string的第一個非空字符轉換成大寫, 其余部分改為小寫。
  
  ¨ @Capitalize_What = ‘sentence’
  
  函數將 @string中的每一句的首個非空字符轉換為大寫,句子其余部分轉換為小寫。斷句的依據是’.’、’!’、’?’
  
  ¨ @Capitalize_What = ‘Word’
  
  函數將 @string中的每個詞都轉換成首字符大寫,其余小寫的形式。
  
  CREATE FUNCTION dbo.Capitalize (
  
  -- Capitalize the first character of every Word,
  
  -- sentence, or the whole string. Put the rest to lowercase.
  
  @String VARCHAR (8000),
  
  @Capitalize_What VARCHAR (8) = ’string’
  
  -- String: Capitalize the first letter of the string
  
  -- Sentence: Capitalize the first letter of every sentence.
  
  -- Delimiters: ./!/?
  
  -- Word: Capitalize the first letter of every Word.
  
  -- Delimiters: any characters other than letters and digits.
  
  )
  
  RETURNS VARCHAR(8000)
  
  AS
  
  BEGIN
  
  DECLARE @Position SMALLINT,
  
  @Char CHAR(1),
  
  @First_Char CHAR (1),
  
  @Word_Start SMALLINT
  
  SET @Capitalize_What = LOWER( @Capitalize_What )
  
  SET @Word_Start = 0
  
  IF @Capitalize_What IN (‘Word’, ‘sentence’)
  
  BEGIN
  
  SET @Position = DATALENGTH( @String )
  
  WHILE @Position >= 0 BEGIN
  
  SET @Char = CASE @Position
  
  WHEN 0 THEN ’.’
  
  ELSE UPPER( SUBSTRING(
  
  @String, @Position,
  
  1 ) )
  
  END
  
  IF @Char BETWEEN ’A’ AND ’Z’
  
  OR @Char BETWEEN ’0’ and ’9’ BEGIN
  
  SET @Word_Start = @Position
  
  SET @First_Char = UPPER( @Char )
  
  END
  
  ELSE BEGIN
  
  IF @Capitalize_What = ’Word’
  
  OR @Char in ( ’.’, ’!’, ’?’ ) BEGIN
  
  IF @Word_Start > 0
  
  AND @First_Char BETWEEN ’A’
  
  AND ’Z’
  
  SET @String = STUFF(
  
  @String, @Word_Start,
  

@First_Char )
  
  SET @Word_Start = 0
  
  END
  
  END
  
  SET @Position = @Position - 1
  
  END
  
  END
  
  ELSE BEGIN -- Capitalize the first character
  
  SET @Position = 0
  
  WHILE @Position < DATALENGTH( @String )
  
  BEGIN
  
  SET @Position = @Position + 1
  
  SET @Char = UPPER( SUBSTRING( @String,
  
  @Position, 1 ) )
  
  IF @Char BETWEEN ’A’ AND ’Z’
  
  OR @Char BETWEEN ’0’ AND ’9’ BEGIN
  
  SET @String = STUFF( @String,
  
  @Position, 1, @Char )
  
  SET @Position = 9999
  
  END
  
  END
  
  END
  
  RETURN( @String )
  
  END
  
  go
  
  小結
  
  SQL Server 2000 的 UDF的應用是很廣泛的,它會給編程人員帶來極大的便利。您可以建立自己的’system’ UDF,存在Master數據庫中,可以為任何數據庫進行調用。
  
  UDF也有不足,我們知道系統函數可以任意調有,不管您使用大寫、小寫或者大小寫混合。UDF卻不行,它是大小寫敏感的。
  
  在未來的版本中,我希望微軟為UDF增加默認值的功能,以後我們可以這樣定義一個函數。
  
  CREAT FUNCTION dbo.Test_default
  
  ( @parm int = 0 )
  
  RETURN INT
  
  AS
  
  BEGIN
  
  RETURN ( @parm )
  
  END
  
  UDF中諸如此類的小問題還有不少,希望UDF的功能越來越強大,我們編程人員工作起來就會越來越輕松。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved