基于Advantage Architect更新目标表日期为指定月份的第一天
在Advantage Architect中通过内连接更新日期字段为固定日格式
嘿,刚好对Advantage Database的操作比较熟,这就给你说怎么实现这个需求!你需要把目标表的日期字段更新为dd/mm/yyyy格式,日固定为01,取值来自另一张表的年份和月份,而且要用内连接关联——咱们直接用ADS支持的带JOIN的UPDATE语句就能搞定。
核心思路
Advantage Database Server(ADS)允许在UPDATE语句里直接做内连接,所以我们可以关联存储年月的表和目标表,然后把年份、月份和固定的01拼接成标准日期格式,再更新到目标字段。
示例SQL(记得替换占位符)
假设存储年月的表叫YearMonthTable,目标表叫TargetTable,两者的关联字段是关联字段,目标表要更新的日期字段是目标日期字段,年月表的年份字段是年份、月份字段是月份:
-- 如果目标字段是DATE类型,直接转成日期格式 UPDATE TargetTable INNER JOIN YearMonthTable ON TargetTable.关联字段 = YearMonthTable.关联字段 SET TargetTable.目标日期字段 = CONVERT(DATE, YearMonthTable.年份 + '-' + YearMonthTable.月份 + '-01', 23) -- 如果目标字段是字符串类型,转成dd/mm/yyyy格式的字符串 -- UPDATE TargetTable -- INNER JOIN YearMonthTable -- ON TargetTable.关联字段 = YearMonthTable.关联字段 -- SET TargetTable.目标日期字段 = FORMAT(CONVERT(DATE, YearMonthTable.年份 + '-' + YearMonthTable.月份 + '-01', 23), 'dd/MM/yyyy')
关键说明
- 替换占位符:一定要把上面的
TargetTable、YearMonthTable、关联字段、目标日期字段、年份、月份换成你实际的表名和字段名,别直接用示例里的名字! - 先测试再更新:执行UPDATE前,建议先跑个SELECT语句验证结果是否正确,避免误操作:
SELECT TargetTable.目标日期字段 AS 原日期值, FORMAT(CONVERT(DATE, YearMonthTable.年份 + '-' + YearMonthTable.月份 + '-01', 23), 'dd/MM/yyyy') AS 待更新日期值 FROM TargetTable INNER JOIN YearMonthTable ON TargetTable.关联字段 = YearMonthTable.关联字段
- 格式注意:用
FORMAT的时候,月份要用大写的MM,小写的mm代表的是分钟,别搞混了!
在Advantage Architect里,你可以打开Query Analyzer,先运行测试的SELECT语句确认数据没问题,再执行UPDATE语句就稳啦~
内容的提问来源于stack exchange,提问作者user8591026
相关产品推荐
相关产品推荐

