【问题标题】:SQL Server cast to text datatypeSQL Server 强制转换为文本数据类型
【发布时间】:2010-07-20 04:07:34
【问题描述】:

有人可以帮我处理 SQL Server CASTtext 数据类型吗?我正在尝试使用 CAST 函数显示要显示的长文本,但如果我从超过 1 个表中检索,它将不起作用。也许我创建的语句不正确。

$from = 'RealEstate AS RE, Models AS M, Catalogue AS C';

$select = 'CAST(RE.Details AS TEXT) AS RE.Details, RE.Postcode, RE.Suburb, 
    M.ModelName, M.ModelID, RE.HouseID, RE.ContactName, RE.ContactPhone, RE.PlanName, 
    RE.Address, RE.Street, RE.Price, RE.StreetNo, RE.CatID, RE.Fixed';


$query = mssql_query("SELECT DISTINCT $select 
                      FROM RealEstate AS RE, Models AS M 
                      WHERE RE.HouseID=$hid 
                      AND RE.ModelID=M.ModelID");

【问题讨论】:

  • 您收到的错误信息具体是什么?你究竟为什么要转换成文本?它不会增加已经存储的字符数。并且请学会使用显式连接,隐式连接容易出错,更难维护,而且编码技术很差。

标签: php sql-server tsql


【解决方案1】:

我的理解是您不能在 mssql_query 块中连接字符串 - 根据您提供的内容,我认为不需要它。如果要连接动态 SQL 语句,请在将语句发送到 mssql_query 函数之前这样做:

$select = 'SELECT DISTINCT CAST(re.details AS TEXT) as details,
                                         re.postcode,
                                         re.suburb,
                                         m.modelname,
                                         m.modelid,
                                         re.houseid,
                                         re.contactname,
                                         re.contactphone,
                                         re.planname,
                                         re.address,
                                         re.street,
                                         re.price,
                                         re.streetno,
                                         re.catid,
                                         re.fixed
                               FROM REALESTATE re
                               JOIN MODELS m ON m.modelid = re.modelid
                              WHERE re.houseid = $hid"
$query = mssql_query($select);

【讨论】:

  • @Honshi:表名不区分大小写,大写只是我的编码风格。没有失败的细节,我帮不了你。
【解决方案2】:

我很确定别名不能包含句点(违规者:RE.Details)。尝试将其命名为 Details(如果您想保留句点,则将别名括在引号中(mysql 的反引号),但我猜您不会这样做)。

【讨论】:

  • $from 表 Model 和 RealEstate 都带有相同的“详细信息”字段。这就是为什么我使用时间段仅调用 RealEstate 表中的详细信息。你是正确的关于取出期间。它可以工作,但又在一个表中,我不需要进行 RealEstate AS RE 调用。然而,我可以将它变成一个双重查询,但我只是想尽量缩短它。
  • @Honshi:不适用于列别名 - 以我的查询为例。如果您确实需要查看名为“re.details”的列,则反引号仅适用于 MySQL - ANSI 标准是使用双引号。
  • @OMG Ponies 我正在试用您的代码。还是行不通。我认为这些表格区分大小写?所以我将所有代码转换为正确的大小写,但仍然无法正常工作。谢谢你的建议
  • 对不起,误读了问题,以为是 MySQL 的问题。改为说“引号”。
【解决方案3】:
$queryDetails = mssql_query("SELECT CAST(Details AS TEXT) AS Details FROM RealEstate WHERE HouseID=$hid");

我从中进行了另一个查询。它可能是一个多余的电话。我对mySQL比较熟悉,使用msSQL后发现操作起来很麻烦。尤其是当 LIMIT 功能不可用于分页时。

【讨论】:

    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    相关资源
    最近更新 更多