检查表名是否包含日期

时间:2017-10-31 05:07:36

标签: sql postgresql

我正在尝试查找名称以yyyy_mm_dd结尾的所有表格,例如temp_2017_10_01alpha_2016_11_02

目前我正在尝试这样做:

SELECT table_name 
FROM information_Schema.tables
WHERE table_name LIKE '%2017_%'
OR table_name LIKE '%2016_%'
OR table_name LIKE '%2015_%'

这样做的优雅方式是什么?

3 个答案:

答案 0 :(得分:2)

您可以尝试使用正则表达式:

int sectionWidth = ...
int sectionHeight = ...
int sectionSrcX = ...  
int sectionSrcY = ... 

Pixmap allTexture = new Pixmap(Gdx.files.internal("path"));

Pixmap section = new Pixmap(sectionWidth, sectionHeight, Pixmap.Format.RGBA8888);

section.drawTexture(0, 0, sectionSrcX, sectionSrcY, sectionWidth, sectionHeight);

Texture cutTexture = new Texture(section);

这将查找2015年,2016年和2017年。如果您想要更通用的模式来查找任何日期,您可以使用此:

SELECT table_name 
FROM information_Schema.tables
WHERE table_name ~* '201[567]_.*'

严格来说,上面的模式现在过于通用了,因为它允许SELECT table_name FROM information_Schema.tables WHERE table_name ~* '[0-9]{4}_[0-9]{2}_[0-9]{2}' 之类的东西不是有效日期。但我的猜测是,这对你的用例来说已经足够了,因为你不是要尝试验证表名,只是提取它们。

答案 1 :(得分:0)

尝试:如果以下使用了相应数据库中的所有功能,因为它在SQL SERVER OR中正常工作,您可以使用等效功能代替

SELECT table_name 
FROM information_Schema.tables
WHERE ISDATE(REPLACE(RIGHT(table_name, 10), '_', '-')) = 1

答案 2 :(得分:0)

你可以使用这样的东西。使用简单的substr和to_date函数,可以在任何地方工作。

SELECT table_name
FROM information_Schema.tables WHERE To_Date(SubStr(table_name,Length(table_name)-9,4)||'-'||SubStr(table_name,Length(table_name)-4,2)||'-'||SubStr(table_name,Length(table_name)-1,2),'YYYY-MM-DD') BETWEEN To_Date('01-JAN-2016') AND To_Date('31-DEC-2016');

将在2016年1月1日至2016年12月31日期间为您提供所有表格,您可以替换您想要的任何范围。如果你想要所有,那么你可以给'01 -JAN-1950'和'31 -DEC-3000'以确保你能得到所有这些;)