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

问题描述 投票:0回答:2

我只是试图研究/获取如何动态(即EET.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)

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

谢谢你的帮助!

sql sql-server
2个回答
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

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表中设置日期字段会不会更有意义?

© www.soinside.com 2019 - 2024. All rights reserved.