2009-08-12 10 views
11

文字列をテキストファイルに挿入するtsqlプロシージャを作成しました。つまり、すべての変数を文字列に変換する必要があります。 case by case文を使用するのではなく、これを行う方が簡単ですか?すべての場合を包含し、どの型を文字列型に強制しますか?tsql:変数を文字列型にキャストする最良の方法は?

CAST(expression AS CHAR) 
-- or: 
CAST(expression AS VARCHAR) 

あなたは、必要に応じて長さを指定することができます。

事前

答えて

25

で感謝のすべてのキャップは、小文字を使用して、値を補間する必要がありその中に何かある、リテラルテキストです。

デフォルトの表現とは異なる方法でフォーマットする場合は、残念ながらdatetimesでは少し難しくなります。

私の情報はMSDN siteから届きました。私はあなたがそのサイトや他のものを慎重に読んで、ちょっと試してみなければならないと思うが、うまくいけばCASTの機能が良いスタートになるだろう。

幸運を祈る!

0

私はそれがあるとは思っていません - それがあったとしても、私はそれを信用しませんでした。おそらく全体的な書式設定をほとんど制御できないでしょう。自分でビルドすると、見た目が正確に見えます。熟考する要因:

  • 番号、先行ゼロ、小数点以下の桁、+/-兆候
  • ラインの長さ、単語末尾のスペースを、
  • 先行スペースを包む、ドン」文字列の間にスペースをフォーマット

    • 日先頭または末尾に空白があります

    ...続きます。

  • 1

    あなたは毎回それを変換/キャストする必要があります。私は、関数が使用するために作られた:それは価値や言葉だけがnullの場合はnullを中心に単一引用符を置く

    CREATE FUNCTION QuoteNull 
    (
        @InputStr  varchar(8000) --value to force to string 
    ) 
    RETURNS 
    varchar(8000) 
    AS 
    
    BEGIN 
        RETURN COALESCE(''''[email protected]+'''','null') 
    END 
    

    ができますが、それは、必要に応じてカスタマイズすることができます。ここ

    自動的に日付をフォーマット処理したバージョンです:

    CREATE FUNCTION QuoteNull 
    (
        @InputStr  sql_variant --value to force to string 
    ) 
    RETURNS 
    varchar(8000) 
    AS 
    
    BEGIN 
        DECLARE @String varchar(8000) 
        SET @String=COALESCE(''''+ CASE SQL_VARIANT_PROPERTY(@InputStr,'BaseType') 
                WHEN 'datetime' THEN CONVERT(varchar(23),@InputStr,121) 
                ELSE CONVERT(varchar(8000),@InputStr) 
               END 
              +'''','null') 
        RETURN @String 
    END 
    
    関連する問題