2017-03-17 19 views
-4

我有一個查詢在postgres上運行,我需要轉換它,因爲它應該在MS-SQL Server上工作。我需要將Postgres特定的查詢轉換爲SQL Server(T-SQL)

case when position('.' in campo30) >= 1 
    then CAST(replace(replace(CAMPO30,'.',''),',','.') AS FLOAT) 
    else CAST(replace(CAMPO30,',','.') AS FLOAT) 
end 

什麼是MS-SQL Server的等效代碼?

+4

頭說 「到SQL」,這意味着ANSI SQL,但是你標記MySQL。你想要哪一個? – jarlh

+0

同意jarlh。但我不會說,sql意味着ansi sql,更多的是,postgresql也是一種sql語言。所以OP需要指定他想轉換的方言(或者ansi sql)。 + OP應該發佈他到目前爲止所嘗試的內容。我認爲這只是一個「有人爲我做的,我不想」 –

+0

猜測,他們的意思是[標籤:MS-SQL],但認爲「SQL」的意思是「微軟SQL服務器」,而[標籤:mysql]標籤只是標籤垃圾郵件誤解MySQL和PostgreSQL之間的區別。他們的其他問題http://stackoverflow.com/q/42417364/398670指的是「轉換失敗」,這是一個SQL Server錯誤。 –

回答

0

在SQL-Server一起使用CHARINDEX

CHARINDEX(expressionToFind,expressionToSearch [,START_LOCATION])

DECLARE @CAMPO30 varchar(64) = '2,663.25'; 

SELECT CASE WHEN CHARINDEX('.', @CAMPO30) > 1 
      THEN CAST(REPLACE(REPLACE(@CAMPO30,'.',''),',','.') AS FLOAT) 
      ELSE CAST(REPLACE(@CAMPO30,',','.') AS FLOAT) 
     END AS CAMPO30 
GO 

| CAMPO30 | 
| ------: | 
| 2.66325 | 

dbfiddle here

+0

現在感謝萬物工作:) –