Эквивалент снежинки для Quotename() в SQL Server?

Какая функция будет эквивалентна quotename()?

Ниже приведена часть хранимой процедуры:

declare @numcols nvarchar(max)

select @numcols = string_agg(quotename(NAME), ', ') within group (order by NAME)
from 
    (select distinct NAME from #parsednum) as names

Мне нужно преобразовать этот код в эквивалент снежинки, где #parsednum — это временная таблица. заранее спасибо

Я не верю, что существует какой-либо встроенный эквивалент. Насколько я понимаю, эта функция существует исключительно для преобразования строки в действительный идентификатор на сервере sql. Хотите ли вы превратить строку в действительный идентификатор Snowflake или по-прежнему получать в качестве вывода действительные идентификаторы сервера sql?

JNevill 19.07.2024 22:14

Когда я проверил результаты этих временных таблиц, я считаю, что мне нужно, чтобы все значения из столбца имени были заключены в разделитель и использовали listagg вместо предоставленного string_agg. Вот что я понимаю здесь.

gayathri 19.07.2024 22:35

Кажется, что имя кавычки просто учитывает символ-разделитель, являющийся частью строки, путем заключения значений в квадратные скобки перед построением списка. Для этого не существует эквивалентной функции SF, но вы можете использовать array_agg, который автоматически позаботится об этом.

Rajat 20.07.2024 18:46

Функция Array_agg работала так, как ожидалось, и даже list_agg вернул тот же ожидаемый результат.

gayathri 23.07.2024 01:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку QUOTENAME() настолько специфичен для SQL Server, что преобразует строки в имена объектов сервера sql, в Snowflake не будет замены 1:1. Если квадратные скобки важны для инкапсуляции, вы можете использовать функции array_agg() и array_to_string(), чтобы приблизиться к тому, что делает ваш string_agg(quotename()):

'[' || ARRAY_TO_STRING(ARRAY_AGG(NAME), '], [') || ']'

Приятно то, что если вы не хотите использовать квадратные скобки в качестве символа инкапсуляции, вы можете легко изменить их на что угодно, например на двойные кавычки:

'"' || ARRAY_TO_STRING(ARRAY_AGG(NAME), '", "') || '"'

Предостережение здесь в том, что QUOTENAME() делает больше, чем просто инкапсулирует. Он также экранирует управляющие символы внутри строки. Если это важно, вы можете использовать регулярное выражение в столбце NAME, прежде чем запускать функции ARRAY_TO_STRING(ARRAY_AGG()).

Спасибо, это тоже сработало. list_agg вернул тот же ожидаемый результат.

gayathri 23.07.2024 01:02

Теперь у меня возникает проблема, когда я пытаюсь использовать сводную таблицу с полученным выше результатом. Он выдает неверный идентификатор «некоторое значение» при использовании приведенного ниже запроса внутри хранимой процедуры. Создайте или замените временную таблицу как Select * From parsednum Pivot( Max(value) for name in (||numcols||))c

gayathri 23.07.2024 01:11

Это numcols результат этой логики? Если да, то этот sql CREATE OR REPLACE строится в виде строки и выполняется динамически? Если да, то есть ли эта процедура в Snowflake? Если да, то инкапсулируете ли вы имена столбцов в квадратные скобки (что актуально только для сервера Microsoft sql или базы данных доступа)?

JNevill 23.07.2024 15:57

Это потрясающе, я выполнил пошаговое руководство и выполнил их как динамический SQL в Snowflake, и теперь они работают. Инкапсулировали значения numcol в одинарные кавычки и динамически выполнили описанную выше проблему.

gayathri 23.07.2024 17:48

Идеальный! Рад слышать, что у вас все работает. Это непростая вещь.

JNevill 23.07.2024 17:49

Это еще один случай, продолжающий описанный выше случай ** sql_text_transpose := ' CREATE OR REPLACE TEMP TABLE, транспонированный как выберите a.DATA_KEY как data_key, ' || всеколы || ' как все столбцы из transposenum AS a left join transposechar AS b on a.DATA_KEY = b.DATA_KEY '; ВЫПОЛНИТЬ НЕМЕДЛЕННО sql_text_transpose; ** Это приводит к отсутствию спецификации столбца.

gayathri 23.07.2024 17:49

Другие вопросы по теме