将带有切换用例的SQL View创建转换为Postgresql

时间:2019-06-07 03:00:50

标签: sql sql-server postgresql database-migration string-concatenation

我是PostgreSQL语法的新手。我有这个MS SQL Server查询来创建带有CASE的VIEW。

等效的Postgres查询是什么?

CREATE VIEW QUAD_TEXT AS
SELECT
  GRAPH_ID,
  SUBJECT,
  SUBJECT_TYPE,
  PREDICATE,
  OBJECT_URI,
  OBJECT_VALUE,
  OBJECT_DATATYPE,
  (CASE '"'+OBJECT_VALUE+'"' WHEN '""'
           THEN
               (CASE '<'+OBJECT_URI+'>' WHEN '<>'
                THEN '""'
                ELSE '<'+OBJECT_URI+'>' END)
            ELSE
        '"'+OBJECT_VALUE+'"'
        +(CASE '"'+OBJECT_DATATYPE+'"' WHEN '""'
          THEN '""'
          ELSE (CASE
              WHEN OBJECT_DATATYPE LIKE 'http%' THEN '^^<'+OBJECT_DATATYPE+'>'
              ELSE '@'+OBJECT_DATATYPE+'' END)
          END)
        END) AS OBJECT,
  STATUS
FROM TUPLES
WHERE ((CONVERT(bigint,CONVERT(VARBINARY(8),CONTEXT_INFO()))) & GA) > 0
 AND VERSION = '0';

2 个答案:

答案 0 :(得分:1)

  • Microsoft SQL Server使用+进行字符串连接。
  • Postgres符合SQL标准,并使用||进行字符串连接,

或者,我们可以在Postgres中使用CONCAT函数。

  1. 使用||'Post' || 'gres' ---> Postgres
  2. 使用CONCATCONCAT('Post', 'gres') ---> Postgres

因此,在SQL查询中,您可以使用||CONCAT代替+

有关更多详细信息,请查看以下链接:

答案 1 :(得分:0)

PostgreSQL符合SQL标准,并使用||而不是+来连接字符串。

因此,等效的PostgreSQL脚本为:

CREATE VIEW QUAD_TEXT AS
SELECT
  GRAPH_ID,
  SUBJECT,
  SUBJECT_TYPE,
  PREDICATE,
  OBJECT_URI,
  OBJECT_VALUE,
  OBJECT_DATATYPE,
  (CASE '"'||OBJECT_VALUE||'"' WHEN '""'
           THEN
               (CASE '<'||OBJECT_URI||'>' WHEN '<>'
                THEN '""'
                ELSE '<'||OBJECT_URI||'>' END)
            ELSE
        '"'||OBJECT_VALUE||'"'
        ||(CASE '"'||OBJECT_DATATYPE||'"' WHEN '""'
          THEN '""'
          ELSE (CASE
              WHEN OBJECT_DATATYPE LIKE 'http%' THEN '^^<'||OBJECT_DATATYPE||'>'
              ELSE '@'||OBJECT_DATATYPE||'' END)
          END)
        END) AS OBJECT,
  STATUS
FROM TUPLES
WHERE ((CAST(CAST(current_setting('CONTEXT_INFO') as bit(8)) as bigint)) & GA) > 0
 AND VERSION = '0';