2011-08-16 20 views
1

現在のクエリは、Format()関数を使用して数値(長整数)を文字列に変換するMS Accessデータベースにあります。SQL Server Format()関数

テーブルが再設計され、SQLサーバーに移動されました。私が変換する必要がある分野は、期間の後にすべてを落として、特定の文字数の文字列に変換するために必要な資金フィールドではありません。

サンプルデータ:

Amount 
228.00000 
1896.00000 
6411.00000 
317.00000 
4830.00000 
898.00000 
1778.00000 
1308.00000 
45139.00000 
424.00000 

現在のMS Accessクエリ:

SELECT Format(CallAmt],"000000000000000") AS Amount 
FROM Fed 

新しいクエリ:

SELECT Convert(varchar(15), FedAmount) 
FROM Fed.SM_T_Call 

私はこのように見えるように私の最終製品をしたいと思います:

Amount 
000000000000228 
000000000001896 
000000000006411 
000000000000317 
000000000004830 
000000000000898 
000000000001778 
000000000001308 
000000000045139 
000000000000424 

期間の後にすべてを削除し、結果に余分なゼロを追加する方法はわかりません。誰も助けを提供することはできますか?

+0

FedAmountは、SQL Serverでどのようなデータ型ですか?あなたはそれがお金の分野ではないと言いました。移動後のSQL Serverの内容は – kd7

+1

です。あなたが質問を編集して最終的な出力をどのように見せたらよいでしょうか。 –

+0

最後の出力が必要です。私たち全員がVBAを気にする/使用するわけではありません。 – gbn

答えて

6

:10進数

  • CASTは
  • 使用STRが先行ゼロ

または上記のすべてを持っている

  • 使用RIGHT('000000000000000' + CAST(MyNumber AS varchar(15)), 15)を正当化右に小数点以下の桁数が固定されていますしますが、私たちドンあなたが望む出力を知りません...

    編集後、更新後

    RIGHT('000000000000000' + CAST(CAST(Amount AS int) AS varchar(15)), 15) 
    

    編集、2011年10月

    SQL Server 2012(Denali)には、書式機能があります。

    編集は、gbn'd答え@ onedaywhen

    DECLARE @len tinyint; 
    SET @len = 15; 
    RIGHT(REPLICATE('0', @len) + CAST(CAST(Amount AS int) AS varchar(255)), @len) 
    
  • +0

    ありがとうございました。私はこれをどのように把握しようとしていたのか分かりませんでした。サンプルデータを含めないと再び申し訳ありません。 – Taryn

    +0

    'REPLICATE( '0'、15)'を使うとコードを読みやすくなります。 – onedaywhen

    +0

    @onedaywhen:真。実際の生活では、おそらくUDFでラップし、パラメータとして長さを持っています... – gbn

    0
    select Cast(Cast(fedamount as int), as varchar(15)) 
    from Fed.SM_T_Call 
    

    実際には動作しますか?

    0
    SELECT CAST(CAST(FLOOR(FedAmont) AS INT) AS VARCHAR(40)) + '.00' 
    
    0

    あなたは小数点データ型を使用することができます

    declare @var decimal(15,6) 
    set @var = 228564.12345678 
    

    をそしてあなたはそれが後のvarchar型にしたい場合:

    select convert(varchar(15),@var) 
    

    またはSELECTで、それは見ることができますこのように:

    select 
        [field1] as OldValue, 
        convert(decimal(15,6),[field1]) as NewValue 
    from 
        myTable 
    
    0

    ことでコメントした後、SQL Serverの良いものであると独自の機能RIGHT()REPLICATE()を使用しています。

    これを一度移植しなければならないことに注意してください。標準SQL関数を使用しているため、以下はもっと移植性の高いバージョンです。標準SQLの文字列連結演算子は||ですが、SQL Serverは同じものに対しては+を使用しています(そして、MSは依然として対応していると主張しています)。しかし、まだ提案されているコードの移植の規模に大きくスコア+`||を変換するためには重要ではありません。

    REVERSE(CAST(REVERSE(CAST(CAST(Amount AS INTEGER) AS VARCHAR(15))) 
        + '000000000000000' AS CHAR(15))) 
    
    関連する問題