我正在尝试查找名称以yyyy_mm_dd结尾的所有表格,例如temp_2017_10_01
,alpha_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_%'
这样做的优雅方式是什么?
答案 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'以确保你能得到所有这些;)