我需要在.once语句中为SQLite连接年份和日期

b4qexyjb  于 2023-03-03  发布在  SQLite
关注(0)|答案(1)|浏览(128)

我需要使用. once ./sample_yyyy_mm. csv,在这里,我希望yyyy和mm是动态的,因此可以使用
.选择一次"./样本1_"||选择字符串时间('% m','现在')||"--"||选择字符串时间('% Y','现在')-1||". csv格式";
但这是行不通的。你能请帮助。

iecba09b

iecba09b1#

SQLite的SQL可以是(参见下文-1):-

SELECT strftime('./sample1_%m_%Y.csv','now');

例如,结果应为**./样本1_02_2023.csv**

  • 所有操作,包括前缀和后缀的连接,都在strftime函数的一次调用中完成。

不清楚您使用**-1的期望是什么。如果按原样包含它,则其用途是尝试对字符串/文本值执行数学运算,该字符串值将被视为0,最终结果将是-1.0**
如果显示您正在尝试获取上一年,则可以将上面的查询修改为:-

SELECT strftime('./sample1_%m_%Y.csv','now','-1 year');

例如,结果将是**./sample1_02_2022.csv**(显然基于运行查询的日期)。

  • 注意,year也可以是years,并且您可以使用其他修饰符,例如daydaysmonthmonths
  • 请参阅SQLite日期和时间函数-3.修饰符

关于

`select "./sample1_" || select strftime('%m','now') || "_" || select strftime('%Y','now') - 1 ||".csv";`

这有很多问题:

  • 字符串/文本文字(./sample1__.csv)需要用单引号而不是双引号括起来,否则它们将被视为组件名称(例如表/列名称),这取决于它们出现的位置和SQLite解析器的预期。
  • 子查询(即SELECT中的SELECT)需要用括号括起来。

应用上述内容,您可以:-

`select './sample1_' || (select strftime('%m','now')) || '_' || (select strftime('%Y','now')) - 1 ||'.csv';`

但是结果将是**-1.0**(由于数学运算处理)。

如果没有-1(参见上文的重新修饰符),即select './sample1_' || (select strftime('%m','now')) || '_' || (select strftime('%Y','now')) ||'.csv';,结果将为**./sample1_02_2023.csv**

相关问题