遍历列表以获取SQL中的字符串

时间:2014-09-17 17:44:38

标签: sql sql-server regex string

我有一个SQL表,如下所示。我想使用表格中的2个字段生成字符串。

     A        B
    M1     tiger
    M1     cat
    M1     dog
    M3     lion

我想在这个表中读取,计算行数,并将其存储在字符串变量中,如String1 = M1_tiger,String2 = M1_cat等。最好的方法是什么?

5 个答案:

答案 0 :(得分:1)

您可以执行concat类型查询。

SELECT (Table.A + '_' + Table.B) AS A_B, COUNT(*) AS RowsCount FROM Table

我认为您的表名是"表",您将找到所需字符串的结果将是名为A_B的列,每条记录在每条记录中都有两件事,一个是你要求的字符串,另一个列总是相同的,你表上的记录总数。

计数部分有点简单,但请查看此链接,以便您可以使用所需的具体计数:http://www.w3schools.com/sql/sql_func_count.asp

答案 1 :(得分:0)

你可以试试这个:

SELECT CONCAT(A, '_', B) FROM yourtable

答案 2 :(得分:0)

当你说"读到这个表"时,你的意思是把它读成像C#这样的编程语言吗?或者你想动态创建sql变量吗?

您可能希望使用表变量来存储字符串而不是单个变量。关于获取行号,您可以使用类似:

WITH CTE AS 
(
     SELECT A, B, 
     ROW_NUMBER() OVER (order by OrderDate) AS 'RowNumber' 
     FROM MyTable
) 
SELECT A,B,RowNumber FROM CTE

有关如何选择使用表变量的更多信息,请参阅此答案。 SQL: Dynamic Variable Names

答案 3 :(得分:0)

如果您使用的是Oracle,您也可以这样做:

选择A ||' _' || B.  来自你的表

答案 4 :(得分:0)

PostgreSQL解决方案

CREATE SEQUENCE one; 
SELECT array_to_string(array_agg(concat('String',nextval('one'),' = ',A,'_',B)), ', ')
AS result
FROM test_table; 
DROP SEQUENCE one;

<强>解释

  • 创建临时序列&#39; one&#39;为了使用nextval功能。
  • nextval (&#39;序列&#39;) - 提前序列并返回新值。
  • concat (&#39; input1&#39;,...) - 连接所有参数。
  • array_agg (&#39; input1&#39;,...); - 输入值,包括空值, 连接成一个数组。
  • array_to_string (&#39; array&#39;,&#39; delimiter&#39;) - 连接数组元素 使用提供的分隔符和可选的空字符串。
  • 删除序列&#39; one&#39;。

查询的输出(对于test_table中的两个测试行):

                  result                   
-------------------------------------------
 String1 = M1_tiger, String2 = M1_cat
(1 row)