Цитирование текста
Быстрая функция в M, которая, я думаю, добавляет одинарные кавычки в строку, переданную в
Ваша функция верна. &
- оператор объединения текста .
Поскольку вы используете одно выражение, вы можете упростить его: удаление внутреннего выражения let..in
. (Если вы не откроете advanced editor
, вы не увидите внешнее выражение let..in
).
quote_text = (string as text) => "'" & string & "'"
Примечание. На снимке экрана есть дополнительные кавычки
.
CHASE
CITI
"TD, AMERITRADE"
Вот почему вы в итоге набираете:
'CHASE'
'CITI'
'"TD, AMERITRADE"'
В вашей ячейке, вероятно, есть кавычки "TD, AMERITRADE"
, но нет других.
Получение списка через запятую в виде одной строки
Text.Combine(list, separator=", ")
создаст строку, подобную CSV-файлу.
let
list_names = table3[Company],
// equivalent to: list_names = {"CHASE", "CITI", "TD, AMERITRADE"},
without_quotes = Text.Combine(list_names, ", "),
list_quoted = List.Transform(
list_names,
quote_text
),
with_quotes = Text.Combine(list_quoted, ", "),
results = [
list_names = list_names,
list_quoted = list_quoted,
string_without_quotes = without_quotes,
string_with_quotes = with_quotes,
without_equal_to = "string = ""CHASE, CITI, TD, AMERITRADE""",
with_equal_to = "string = ""'CHASE', 'CITI', 'TD, AMERITRADE'"""
]
in
results
Как мы используем эту строку в собственном запросе?
В моем запросе используется SQL
, но метод такой же для Oracle.
raw_sql_query
- ваш необработанный запрос. Он использует параметр @Company
sql_parameters
типа Record
, который объявляет все используемые вами параметры. Здесь мы используем вашу строку с функцией qoute_text
.
Value.NativeQuery
вставляет параметры для вас.
let
company = "TD, AMERITRADE",
raw_sql_query = "
select * from Table
where Company = @Company
",
sql_parameters = [
Company = quote_text( company )
],
source = Sql.Database(
"localhost",
"Adventure Works"
),
results = Value.NativeQuery(
source,
raw_sql_query,
sql_parameters
)
in
results
Как проверить, правильно ли используется строковая функция в кавычках?
Сначала создайте новый пустой запрос. Мы вызываем quote_text()
, чтобы проверить вывод.
Я использовал Record
с именем results
, чтобы вы могли пометить и просмотреть каждое значение на одном экране.
manual_quote
использует оператор конкатенации строк для кавычек строк
quote_string( sample_string )
вставляет переменные в текстовый шаблон. Оба возвращают одну и ту же строку.
Text.Format
становится чище, чем сложнее становится ваш шаблон. Эта функция достаточно проста и не обязательна.
Ваша исходная функция
Вот как выглядит ваша функция в расширенном редакторе:
let
quote_text = (x) =>
let
string_format = "'" & x & "'"
in
string_format
in
quote_text
Вы можете удалить внутреннюю let
let
quote_text_simple = (string as text) =>
"'" & string & "'"
in
quote_text_simple
Как использовать необязательные аргументы и строки Шаблоны
let
// a custom function to Surround a string with single quotes.
// A optional second argument lets you specify a different character
quote_string = (input_string as text, optional character as text) =>
let
character = if character = null then "'" else character,
template = "#[quote]#[string]#[quote]",
quoted_string = Text.Format(
template,
[
quote = character,
string = input_string
]
)
in
quoted_string
in
quote_string