Захватите части c частей вашего запроса в объекте
query <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%random_box%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
Произвольно сгенерируйте комбинацию букв и цифр
letters <- c("A", "B", "C")
random_box <- paste0(sample(letters, 1),round(runif(0,9999, n = 1)))
Подставьте это в ваш запрос
new.query <- gsub("random_box", random_box, query)
Теперь new.query
имеет значение типа
[1] "SELECT FUND_CD, FUND_FNM ОТ A001, ГДЕ FUND_CD НРАВИТСЯ '% B5647%' И TYPE_GB = 'A2' И END_YMD = ' 99999999 '"
Вы можете установить значения min
и max
числа в runif
. Если необходимо иметь определенное количество цифр, вы также можете «дополнить» числа 0, так что если ваше случайное число маленькое, например 12, вы получите 0012 вместо 12.
Чтобы увеличить это, вы можете либо запустить простой взгляд, либо l oop, либо просто увеличить n
из sample
и / или runif
до любого желаемого размера, либо создать множество копий оператора из этих результатов. или измените оператор SQL, включив ключевое слово "ИЛИ" между каждым результатом, так что вам нужно будет выполнить только 1 SQL оператор.
Например, вместо получения 1 нового результат, если вы хотели 10, то вы могли бы просто сделать что-то вроде этого:
random_box <- paste0(sample(letters, 2),round(runif(0,9999, n = 10)))
length(random_box) # [1] 10
all <- sapply(random_box, function(random_box) gsub("random_box", random_box, query))
names(all) <- NULL
all
[1] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C1866%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[2] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A3236%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[3] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C8977%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[4] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A735%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[5] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C2102%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[6] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A3169%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[7] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C2358%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[8] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A6846%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[9] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%C5268%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
[10] "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%A4433%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
Тогда вы могли бы выполнить l oop и выполнить эти операторы 1 одновременно. Кроме того, вы можете поместить все результаты в оператор 1 SQL, используя ключевое слово «ИЛИ» между каждым результатом, в зависимости от того, что вам нужно.
Обновление
Вы упомянули, что вместо замены ключевого слова в строке вы хотели использовать переменную:
query.part1 <- "SELECT FUND_CD, FUND_FNM FROM A001 WHERE FUND_CD LIKE '%"
query.part2 <- "%' AND TYPE_GB ='A2' AND END_YMD = '99999999'"
paste0(query.part1, random_box, query.part2)
и здесь все в одном выражении:
value <- capture.output(cat(paste0(random_box, "%' OR '%")))
all.in.one <- paste0(query.part1,
value,
query.part2)
gsub("OR '%%'", "", all.in.one)
[1 ] "ВЫБРАТЬ FUND_CD, FUND_FNM ИЗ A001 ГДЕ FUND_CD НРАВИТСЯ '% C1866%' ИЛИ '% A3236%' ИЛИ '% C8977%' ИЛИ '% A735%' ИЛИ '% C2102%' ИЛИ '% A3169%' ИЛИ '% C2358 % 'ИЛИ'% A6846% 'ИЛИ'% C5268% 'ИЛИ'% A4433% 'И TYPE_GB =' A2 'И END_YMD =' 99999999 '"
В зависимости от типа c из SQL (T- SQL, MySQL, et c) вам может потребоваться выполнить некоторые тривиальные корректировки.