Преобразование создания SQL View с помощью регистра переключателя в Postgresql - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в синтаксисе PostgreSQL. У меня есть этот запрос MS SQL Server для создания VIEW с `CASE.

Каким будет эквивалентный запрос 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 ]

1 голос
/ 07 июня 2019
  • Microsoft SQL Server использует + для конкатенации строк.
  • Postgres соответствует стандарту SQL и использует || для конкатенации строк,

В качестве альтернативы мы можемиспользуйте функцию CONCAT в Postgres.

  1. , используя ||: 'Post' || 'gres' ---> Postgres
  2. , используя CONCAT: CONCAT('Post', 'gres') ---> Postgres

Так что в вашем SQL-запросе вы можете использовать || или CONCAT вместо +

Для получения более подробной информации перейдите по следующим ссылкам:

0 голосов
/ 07 июня 2019

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';
...