声明查询引用的动态日期表名称

时间:2018-02-28 19:41:17

标签: sql sql-server

我只是想研究/获取如何使用日期戳创建的动态(即GETDATE()函数)调用表的逻辑。

例如,我在数据库中列出了这样的表:

  • [DBO]。[CLAIM_01.01.2018]
  • [DBO]。[CLAIM_01.15.2018]
  • [DBO]。[CLAIM_01.31.2018]

我所考虑的逻辑行为类似于为表中的数据元素设置变量(即SET @IMPORT_DATE = DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()) - 1,0) )

相反,我想编写一个声明语句,根据日期戳参数扫描数据库中的表名。换句话说,我正在寻找能够引用表生成的最近/最大日期的逻辑(在上面的例子中,1/31/201)

如果我能/应该对此请求提供更大的特异性,请告诉我。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你可以使用这样的东西。选择数据库的用户表并将后缀转换为日期。

DECLARE @maxTable VARCHAR(255)
SET @maxTable = (
    SELECT TOP (1) name
    FROM (
        SELECT  name
            ,   DATEFROMPARTS(RIGHT(name,4), SUBSTRING(name, 7, 2), SUBSTRING(name, 10, 2)) AS dTable
        FROM    sys.tables WHERE type = 'U'
        ) AS sub
    ORDER BY sub.dTable DESC)

SELECT @maxTable

<强>结果

CLAIM_01.31.2018

答案 1 :(得分:0)

如果您必须保留此架构,则可以在sys.tables中选择模式,例如:

DECLARE @IMPORT_DATE nvarchar(10) = CONVERT(nvarchar(10), GETDATE(), 4)
SELECT schemas.name + '.' + tables.name 
FROM sys.tables INNER JOIN sys.schemas 
ON tables.schema_id = schemas.schema_id 
WHERE tables.name LIKE '%' + @IMPORT_DATE + '%'

话虽如此,在单个静态CLAIM表中设置日期字段会更有意义吗?