Найти строки, которые содержат только определенные значения - PullRequest
1 голос
/ 10 июля 2019

У меня есть таблица с полем, которое обозначает, являются ли данные в этой строке действительными или нет. Это поле фактически является комбинацией кодового номера для каждого заказа. Это поле содержит строку неопределенной длины. Мне нужен запрос, который будет выдвигать только строки, в которых все символы в этом поле содержат «AT».

SELECT *
FROM
  (SELECT o.completed_at::TIMESTAMP::date AS "Date",
          u.email AS "User Email",
          o.number AS "Order Number",
          string_agg(sp.name, ', ') AS "Product Name",
          o.total AS "Total Price",
          ssl.name AS "Store Name",
          string_agg(spt.code, ', ') AS code_number
   FROM spree_orders o
   LEFT JOIN spree_users u ON o.user_id = u.id
   LEFT JOIN spree_shipments ss ON ss.order_id = o.id
   LEFT JOIN spree_stock_locations ssl ON ssl.id = ss.stock_location_id
   LEFT JOIN spree_line_items sli ON sli.order_id = o.id
   LEFT JOIN spree_variants sv ON sv.id = sli.variant_id
   LEFT JOIN spree_products sp ON sp.id = sv.product_id
   LEFT JOIN spree_product_types spt ON spt.id = sp.product_type_id
   WHERE o.country_id = 2
     AND o.state = 'complete'
     AND ss.state = 'delivered'
   GROUP BY 1,
            2,
            3,
            5,
            6
   ORDER BY 1 DESC, 2)a
WHERE a.code_number LIKE '%[^AT]%'

токовый выход:

FC573, MS355, AT256,BKR004, DA261, BEV178, FR133, DA304, FP433, FP097, PET025, AT203
AT101, AT256, AT5465

Ожидаемый результат

AT101, AT256, AT5465

Он должен отображать только те строки, которые имеют начальное значение «AT»

1 Ответ

0 голосов
/ 10 июля 2019

Насколько я понимаю, вы хотите сопоставить значение, которое содержит только комбинацию цифр, пробелов, запятых и букв «А» и «Т».Вы можете использовать оператор SIMILAR TO для построения того, что вы хотите, в виде регулярных выражений, например,

WHERE a.code_number SIMILAR TO '[0-9, AT]+'

Или, если вы хотите явно последовательности, начинающиеся с AT, сопровождаемые цифрами и разделенныезапятую и пробел, вы также можете сопоставить это:

WHERE a.code_number SIMILAR TO '([AT[0-9]+])(, [AT[0-9]+])*'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...