Mysql 在逗号分隔的字段中搜索范围

Mysql 在逗号分隔的字段中搜索范围,mysql,csv,Mysql,Csv,我有一个名为“fits”的字段,其中包含逗号分隔的值,如下所示: 12010219910519920513101011991051992051205120101199107199201 其中,对于每个数字,前6位数字是设备代码,后12位数字是唯一的日期范围 现在,我知道CSV很糟糕,并且违反了1NF,但另一种方法是将数据规范化为多个表,因为可能会有大量记录 因此,为了保持简单,我试图编写一个查询,根据提供的装修代码和日期范围来选择行。到目前为止,我有: select data from tabl

我有一个名为“fits”的字段,其中包含逗号分隔的值,如下所示:

12010219910519920513101011991051992051205120101199107199201

其中,对于每个数字,前6位数字是设备代码,后12位数字是唯一的日期范围

现在,我知道CSV很糟糕,并且违反了1NF,但另一种方法是将数据规范化为多个表,因为可能会有大量记录

因此,为了保持简单,我试图编写一个查询,根据提供的装修代码和日期范围来选择行。到目前为止,我有:

select data from table
where fits = any(
    SELECT fits
    FROM table
    WHERE fits LIKE '120102')
AND fits BETWEEN "120102199105000000" AND "120102999999199205"
问题是,介于…和之间的不适用于CSV数据


有没有办法在查询中使用某种通配符将某个范围应用于此类CSV数据,或者是唯一要规范化的sql端解决方案?

如果要在fits列中的值中使用BETWEEN,则需要规范化数据

这不一定是个问题。潜在行大小有多大?对于现代数据库服务器来说,有多少记录不是问题,您会感到惊讶

100万、1000万、1亿对于现代pc上的任何RDMSMySQL、mariadb、mssql、postgresSQL来说都不是问题


正常化您的数据,一切都会简单得多。

显然,您最好的解决方案是生成一个合理的模式,将数据分成fit、date1、date2列,并为每个元组添加行。说生成“太多记录”是不这样做的愚蠢理由。您可以从与此匹配的记录生成派生表:CONCAT(,,,,,,fits,,,,,,)LIKE',120102%',但它不会完全是GeneralHanks!是的,我咬了一口子弹,使它正常化了。