Установка определенного слова в значение - PullRequest
0 голосов
/ 04 марта 2020

Я новичок в кодировании в SQL и столкнулся с трудоемкой проблемой. У нас очень длинный запрос, где определенная дата упоминается много раз. Я знаю, что каждую дату можно написать вручную, но она упоминается около 30 раз. Можно ли установить слово / значение для даты, которую я хочу использовать, что означает, что мне нужно только написать дату один раз? Те, которые я нашел до сих пор, меняют данные только в тех таблицах, которые мне не нужны, только в запросе!

Что-то в строке с "Установить USED_DATE в ..." См., Например, ниже;


USED_DATE = '2019-12-31'

SELECT * ИЗ ИМЕН ГДЕ last_date = USED_DATE

ВЫБРАТЬ * ИЗ СТРАНЫ ГДЕ last_date = USED_DATE

ВЫБРАТЬ * ИЗ ЗАДАНИЙ ГДЕ latest_date = USED_DATE

Et c ...

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вот пример для PostgreSQL с psql (CLI):

$ cat tparm.sh
psql -e -v used_date="'02-29-2020'" -f tparm.sql
$ cat tparm.sql
select * from t1 where c=:used_date;
select * from t2 where c=:used_date;
select * from t3 where c=:used_date;
$ ./tparm.sh
select * from t1 where c='02-29-2020';
 c 
---
(0 rows)

select * from t2 where c='02-29-2020';
 c 
---
(0 rows)

select * from t3 where c='02-29-2020';
 c 
---
(0 rows)
0 голосов
/ 04 марта 2020

Если вы не можете зависеть от переменных psql, вы можете использовать временное представление или функцию SQL (обе могут быть встроены):


\i tmp.sql

CREATE TEMP VIEW view_date AS
SELECT '2020-01-01'::date AS this_date
        ;


CREATE FUNCTION this_date(OUT date )
-- RETURNS DATE
AS
$func$
SELECT '2020-01-01'::date
$func$
LANGUAGE SQL immutable
        ;

EXPLAIN
SELECT count(*) AS cnt
FROM public.tweeps twp
WHERE twp.created_at >= this_date()
        ;

EXPLAIN
SELECT count(*) AS cnt
FROM public.tweeps twp
JOIN view_date v ON twp.created_at >= v.this_date
        ;

Результат:


DROP SCHEMA
CREATE SCHEMA
SET
CREATE VIEW
CREATE FUNCTION
                            QUERY PLAN                             
-------------------------------------------------------------------
 Aggregate  (cost=489.06..489.07 rows=1 width=8)
   ->  Seq Scan on tweeps twp  (cost=0.00..489.02 rows=16 width=0)
         Filter: (created_at >= '2020-01-01'::date)
(3 rows)

                            QUERY PLAN                             
-------------------------------------------------------------------
 Aggregate  (cost=489.06..489.07 rows=1 width=8)
   ->  Seq Scan on tweeps twp  (cost=0.00..489.02 rows=16 width=0)
         Filter: (created_at >= '2020-01-01'::date)
(3 rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...