Могу ли я получить данные из столбца, который содержит данные другого типа, с помощью BETWEEN? - PullRequest
0 голосов
/ 10 января 2019
Data_Insertion

A | MUN170171/P0164 | 16:19:10 | 2018-12-12 
B | MUN170161/P0165 | 17:19:10 | 2018-12-12 
C | MUN170151/P0166 | 18:19:10 | 2018-12-13
D | MUN170141/P0167 | 19:19:10 | 2018-12-13
E | MUN170121/P0168 | 20:19:10 | 2018-12-15

В приведенном выше столбце содержатся различные данные, пользователь, идентификатор, время и дата. Так можно ли использовать между, чтобы получить диапазон для времени, когда пользователь выбрал с 13:00 до 18:00?

Я пытался использовать LIKE, но он смог получить только одну информацию из базы данных.

Я попробовал следующее, но не работает:

SELECT FROM `table' 
WHERE Data_Insertion >= "13:00:00" and Data_Insertion <= "18:00:00" 
    AND `Data_Insertion` LIKE('%2018-12-12%') 
Group by 

Есть ли способ, как я могу сделать следующую работу?

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Вы можете использовать подстроку для получения значения, если вы думаете, что формат данных будет таким же, так как это решение больше похоже на жестко запрограммированный поиск, а не гибкий.

 Create table  temp5  (Salary int , Data_insertion varchar(250)); 

insert into  temp5 values 
( 1000, 'A | MUN170171/P0164 | 16:19:10 | 2018-12-12')
,( 4000, 'B | MUN170161/P0165 | 17:19:10 | 2018-12-12')
,( 5000, 'C | MUN170151/P0166 | 18:19:10 | 2018-12-13')
,(6000, 'D | MUN170141/P0167 | 19:19:10 | 2018-12-13')
,( 70000, 'E | MUN170121/P0168 | 20:19:10 | 2018-12-15')

select salary, data_insertion, substring(data_insertion, 22, 9) timecomp 
, substring(data_insertion, 33, 11) Datecomp  from Temp5
where cast(substring(data_insertion, 33, 11) as date) = '2018-12-12' and
cast(substring(data_insertion, 22, 9) as time) between '13:00:00' AND '18:00:00'  ; 

Выход:

  salary, data_insertion,                               timecomp,  Datecomp
   1000, A | MUN170171/P0164 | 16:19:10 | 2018-12-12,  16:19:10,  2018-12-12
   4000, B | MUN170161/P0165 | 17:19:10 | 2018-12-12,  17:19:10,  2018-12-12

Я предполагаю, что будет несколько гибких подходов, чем этот, если ваш формат данных не согласован.

0 голосов
/ 10 января 2019

Вы хотите извлечь предпоследний столбец. Вы можете сделать это, используя substring_index(). Итак, как-то так:

выберите т. * от т где substring_index (substring_index (data_insertion, '|', -2), '|', -1) между '13: 00: 00 'и '18: 00: 00'

0 голосов
/ 10 января 2019

Во-первых, приведите данные в правильный тип:

ALTER TABLE `table`
MODIFY Data_insertion TIME, MODIFY date_col DATE

После этого с числовым диапазоном будет работать следующее (> / < / = ...)

SELECT FROM `table' 
WHERE Data_Insertion BETWEEN "13:00:00" AND "18:00:00"

Никогда не рекомендуется использовать строковые операторы, например LIKE, в числовых полях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...