【问题标题】:I need to convert a Postgres specific query to SQL Server (T-SQL)我需要将 Postgres 特定查询转换为 SQL Server (T-SQL)
【发布时间】:2017-03-17 08:23:47
【问题描述】:

我有一个在 postgres 上运行的查询,我需要对其进行转换,因为它应该可以在 MS-SQL Server 上运行。

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

MS-SQL Server 的等效代码是什么?

【问题讨论】:

  • 标头说“to SQL”,这意味着 ANSI SQL,但是你标记了 MySQL。你要哪一个?
  • 同意 jarlh。但我不会说,sql 意味着 ansi sql,更多,postgresql 也是一种 sql 方言。所以OP需要指定他想要转换的方言(或ansi sql)。 + OP 应该发布他到目前为止所尝试的内容。我认为这只是“有人为我做这件事,我不想”
  • 猜测,它们的意思是ms-sql,但认为“SQL”的意思是“Microsoft SQL 服务器”,而mysql 标签只是由于误解 MySQL 和 PostgreSQL 之间的差异而产生的垃圾邮件。他们的另一个问题stackoverflow.com/q/42417364/398670 指的是“转换失败”,这是一个 SQL Server 错误。
  • @Ruben,请提供完整明确问题。还要解释你已经尝试过的。这不是一个代码编写服务,它是为了帮助你,如果你遇到困难,不要为你做这一切。
  • 抱歉我的英语不好,我认为我的问题与转换表达式的正确 sintax 有关,因为在 microsoft sql server management studio 中不起作用:( 例如 postiion 无法识别

标签: sql sql-server postgresql


【解决方案1】:

在 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

【讨论】:

  • 感谢现在一切正常 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2013-10-24
相关资源
最近更新 更多