2009-06-11 5 views
4

yy/mm/dd/hh/SQL Serverの - DATEPARTなどの機能に引用符で囲まれていない定数を渡すと、私は のような一定のDATEPART関数を受け入れる関数を作成したい

などの受け入れん:

選択日付要素(DD、GETDATEを私はdd'dd'のようにchar型ではない受け入れる自分の関数を作成したいと思います())

私は

がMyFuncと選択MyFuncと(DD、GETDATE())

なく

を選択したい

( 'DD'、GETDATE())を

+0

おそらく、db2以外のユーザーのために、trim()関数がdb2で何をしているのかを詳しく説明することができます。 –

答えて

0

i 'はD-D'

私はあなたを考える」のようchar型ではないDD受け付けて自分の関数を作成したいですこれに運が戻ってくる。文字を一重引用符で囲まないと、名前として解釈されますが、あなたが提案した方法でそれらを使用したい場合は、どこにでも名前として定義することはできません。

1

あなたは本当にUDFの入力を小さな値のセットに制限することはできません。 ge)。もちろん

CREATE TABLE MyEnumTable (DatePartID tinyint, DatePartValue char(2)) 
GO 
INSERT MyEnumTable(DatePartID, DatePartValue) 
SELECT 1, 'yy' 
UNION 
SELECT 2, 'mm' 
UNION 
SELECT 3, 'dd' 
UNION 
SELECT 4, 'hh' 
GO 

CREATE FUNCTION MyDatePart(@IntervalType tinyint) 
RETURNS varchar(255) 
AS 
BEGIN 
IF NOT EXISTS (SELECT * FROM MyEnumTable WHERE DatePartID = @IntervalType) 
    RETURN 'Invalid IntervalType' 

--Do your stuff 
DECLARE @DatePartvalue char(2) 
SELECT @DatePartValue = DatePartValue 
FROM MyEnumTable 
WHERE DatePartID = @IntervalType 

RETURN @DatePartValue 
END 

GO 

--Check it out 
SELECT dbo.MyDatePart(3), dbo.MyDatePart(12) 

は、私の例が単純化されていますが、あなたのアイデアを得る:このような何か -

は、私はあなたの列挙値のための田部を作成することをお勧めします。

また、setステートメントでudfを使用する予定がある場合は、パフォーマンス上の理由から、この関数をテーブル値の関数にすることを検討してください。私はここで、様々な関数型のパフォーマンスへの影響についてブログ:

http://thehobt.blogspot.com/2009/02/scalar-functions-vs-table-valued.html

関連する問題