【问题标题】:How to Select some fields have same prefix Names如何选择某些具有相同前缀名称的字段
【发布时间】:2021-08-22 09:13:22
【问题描述】:

使用 Firedac,有没有办法选择一组名称以相同前缀开头的列?

假设我们有列字段:PREFIX_col1、PREFIX_col2、...

是否可以提出如下请求:

SELECT 'PREFIX_*' FROM mytable;

我有这张表:[USERS] 有07 Fields

 - ID (PRIMARY kEY)
 - USER_NickName
 - USER_Password
 - EMAIL_Recovery
 - REG_Insert_DateTime
 - REG_Edit_DateTime
 - PICTURE

我只需要使用这样的查询选择两个字段:

SELECT USER.* FROM USERS 

我的意思是在我的查询中加载这两个字段:

 - USER_NickName
 - USER_Password

他们有相同的前缀名称!!
我知道我上面的查询 SELECT 是错误的,但是有没有一种方法可以选择字段而不用只使用它们拥有的前缀编写所有字段名称?
...
非常重要注意:
//================================================= ========//
// FIREDAC 而不是Native SQL Statements ..!! > //
//================================================= ========//

【问题讨论】:

  • 否:SELECT 不能过滤列,只能过滤数据集。
  • @AmigoJack 和 information_schema.columns 呢?
  • @Roberto 仍在过滤数据集,而不是列。 @MartynA 是的:指定。但不过滤。 SELECT t.di*k FROM table AS t 不允许在我遇到的任何 DBMS 中使用。
  • @MartynA 是的:只允许SELECT t.* FROM table AS t 从该表中获取所有列 - 否则您必须完全指定所需的列。短格式:SELECT * FROM table
  • 等等——为什么这个问题的文字和例子和this Q from almost 11 years ago一样?

标签: sql delphi firedac


【解决方案1】:

在 Sqlite 中我们可以这样做:

SELECT 
  "SELECT " || GROUP_CONCAT(NAME) || "  FROM USERS"
  FROM
  PRAGMA_TABLE_INFO("USERS")
  WHERE SUBSTR(NAME, 1, 5)= "USER_"

结果:

SELECT USER_NickName,USER_Password  FROM USERS

上面的结果是我们上面的结果查询中的一个随时可用的查询
=======
我希望这有助于解决所有支持的 Firedac 数据库!!
=======
不幸的是,我现在还没有使用其他数据库进行测试..

【讨论】:

  • 这是一个怎样的答案?您不会从您的表格中获得任何结果,而只能获得一个文本数据集 - 这就是您可以使用 information_schema 已经实现的目标。你仍然没有真正查询你的表。
  • @AmigoJack 是的,当然,但就像我对我的 Sub_Answer(不是总答案)感到难过一样,上面的结果是我们上面的结果查询中的一个准备使用的查询......
  • 只是重复你的答案中的文字不会增加任何价值。 Q 是“选择一些字段”,而不是“创建查询文本”。这个答案的查询与this old one基本相同,只是用SQLite's group_concat() function。你确定你知道你真正想要什么吗?
  • @AmigoJack 我应该删除我的子答案,而我不能在上面的评论部分中发布这样的信息
  • 我同意@AmigoJack 的观点,即这个答案与原始问题不符。但是,您的 q 和这个答案在没有得出明确结论的情况下吸引了如此多的讨论的真正原因是 q 不够清楚 - 您似乎期待使用 SQL 生成 SQL 可执行查询以提供最终结果的解决方案结果,但在您的 q 中没有明确说明。但是,使用 Delphi 代码构造一个查询是微不足道的,该查询使用任意选择的 SELECT 列列表,该列表由您喜欢的任何标准选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2023-02-03
  • 2016-11-05
  • 1970-01-01
相关资源
最近更新 更多