2017-05-16 12 views
-1

私は、000000000000055000の行に沿って何か見えるvarchar(18)を持っています。これは55.00となります。最後の桁は常に0で、残りの数字はゼロで埋められます。テキストを10進数に変換する方法

他の例は次のようになります -

000000000000001260から1.26

000000000000039400から39.40私は私が持っているものから私が必要とするものに変換する方法を

?多くのありがとう

+0

ヒント:これは、適切なソフトウェア(MySQLのは、Oracle、DB2、...)とバージョンの両方で、データベースの質問にタグ付けすると便利です、例えば'sql-server-2014'です。構文と機能の相違は、しばしば答えに影響します。 – HABO

答えて

0

、私は(try_convertを示唆している)

もこれを参照してください。 Try_Convert()はエラーを生成しませんが、偽のデータの場合はnullを返します。

Declare @YourTable table (SomeCol varchar(50)) 
Insert Into @YourTable values 
('000000000000001260') 
,('000000000000039400') 

Select SomeCol 
     ,AsValue = convert(decimal(18,2),somecol)/1000 
From @YourTable 

戻り

SomeCol    AsValue 
000000000000001260 1.2600000 
000000000000039400 39.4000000 
+0

ありがとうございました – ikilledbill

+0

@ikilledbillハッピーに役立ちました。ところで - 非常にクールな名前。 :) –

+0

もし私が小数点以下2桁しか表示しないようにしたいのであれば、どうすればこのようにするのですか?この例では1.26と39.40ですか?このような – ikilledbill

0

これはSQLだと思いますか?

btwの場合、10進数のvarcharはt-sqlで暗黙的に変換されます。 これをSQLクエリで試してみると、何を意味するのかわかります。いうだけで変換()より2012+場合 https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-conversion-database-engine

DECLARE @ValueToConvert VARCHAR(18) = '00000000005320' 
DECLARE @ValueConverted Decimal(18,2) = 0 

DECLARE @Padding Int = 2 
DECLARE @temp1 VARCHAR(18) = SUBSTRING (@ValueToConvert ,0 , CHARINDEX('0', @ValueToConvert,LEN(@ValueToConvert)) - @Padding) 
DECLARE @temp2 VARCHAR(18) = SUBSTRING (@ValueToConvert , CHARINDEX('0', @ValueToConvert,LEN(@ValueToConvert)) - @Padding, CHARINDEX('0', @ValueToConvert,LEN(@ValueToConvert))) 

set @ValueConverted = (concat(@temp1,'.',@temp2)) 

SELECT @ValueConverted 
+0

あなたのアドバイスありがとうございました – ikilledbill

関連する問題