我可以使用between从包含不同类型数据的列中检索数据吗?

dvtswwa3  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(343)
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

上面的列包含不同类型的数据、用户、id、时间和日期。那么,是否可以使用between来获取用户选择下午1点到6点的时间范围呢?
我尝试使用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

有没有办法让我做以下工作?

gr8qqesn

gr8qqesn1#

您要提取倒数第二列。你可以用 substring_index() . 比如说:
从t中选择t.*,其中substring_index(substring_index(data_insertion,“|”、-2)、“|”、-1)介于“13:00:00”和“18:00:00”之间

50pmv0ei

50pmv0ei2#

首先,将数据输入正确的类型:

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 ,在数字字段上。

cgvd09ve

cgvd09ve3#

如果您认为数据的格式将是相同的,那么您可以使用substring来获取值,因为此解决方案更像是硬编码搜索,而不是灵活的搜索。

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

如果您的数据格式不一致,我假设会有一些灵活的方法。

相关问题