Цитирующий текст
быстрая функция в M, которая, как мне кажется, добавляет одинарные кавычки к строке, переданной в
Ваша функция верна. &
- оператор конкатенации текста .
![снимок экрана с результатами quote_text](https://i.stack.imgur.com/JBTDW.png)
Поскольку вы используете одно выражение, вы можете упростить его, удалив внутреннее выражение 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.
![введите описание изображения здесь](https://i.stack.imgur.com/MMVHR.png)
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
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
person
ninMonkey
schedule
21.04.2020