查询自由文本字段

时间:2013-07-24 08:01:49

标签: sql coldfusion qoq

修改
实际上,我运行 MSSQL 查询,假设结果是:

ID  pagename
1   1
2   01
3   01, 15

然后,我运行另一个命令网址并将结果显示为 xml数据,假设结果(以简单形式)为:

4   01, 01 Aaa, 15
5   02
6   03
7   100
8   101
9   115

使用coldfusion,我可以将两个数据合并到一个“临时表”中。所以,实际上,我使用的是QoQ,而不是数据库查询 结束编辑

我有一张这样的表

ID  pagename
1   1
2   01
3   01, 15
4   01, 01 Aaa, 15
5   02
6   03
7   100
8   101
9   115

如果我想显示pagename = 1结果是

,是否可能
ID  pagename
1   1
2   01
3   01, 15
4   01, 01 Aaa, 15

2 个答案:

答案 0 :(得分:2)

我认为编程代码比查询查询更好。我的方法类似于:

<cfset NewQuery = QueryNew("id,pagename","integer,varchar")>
<cfloop query = "ExistingQuery">
  <cfif ListFirst(pagename) EQ 1>
    code to add row and set cell values for NewQuery
  </cfif>
</cfloop>

请注意那些在sql页面上阅读的内容,这是之前的评论: “@MahmoudGamal抱歉,我正在使用Coldfusion函数QueryNew创建临时表”

换句话说,它不是数据库查询。

答案 1 :(得分:-1)

MSSQL的解决方案(有目的的健壮,parselist函数可以帮助你将db规范化为更健全的东西)

帮助功能:

CREATE FUNCTION [dbo].[udf_GetNumeric]
    (@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
    DECLARE @intAlpha INT
    SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
    BEGIN
        WHILE @intAlpha > 0
        BEGIN
            SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
            SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
        END
    END
    RETURN ISNULL(@strAlphaNumeric,0)
END
GO

CREATE FUNCTION [dbo].[ParseList_IntAny]
(   
  @List nvarchar(1000)
)
RETURNS @Result TABLE (
  IntValue int not null
)
as
begin
  declare @Value nvarchar(20), @Position int
  select @List = LTRIM(RTRIM(@List))+ ','
  select @Position = CHARINDEX(',', @List, 1)

  if REPLACE(@List, ',', '') <> ''
  begin
    while @Position > 0
      begin
        select @Value = LTRIM(RTRIM(LEFT(@List, @Position - 1)))
        if @Value <> ''
        begin
          declare @IntValue int
          select @IntValue = dbo.udf_GetNumeric(@Value)
          insert into @Result(IntValue) values (@IntValue)
        end
        select @List = RIGHT(@List, LEN(@List) - @Position)
        select @Position = CHARINDEX(',', @List, 1)
      end
  end
  return
end
GO


declare @tmp table(ID int,  pagename nvarchar(400))
insert into @tmp
select 1,'1'
union select 2,'01'
union select 3,'01, 15'
union select 4,'01, 01 Aaa, 15'
union select 5,'02'
union select 6,'03'
union select 7,'100'
union select 8,'101'
union select 9,'115'

select * from @tmp
where exists(select top 1 1 from dbo.ParseList_IntAny(pagename) where IntValue = 1)