【问题标题】:Visual FoxPro database, spaces in displayed dataVisual FoxPro 数据库,显示数据中的空格
【发布时间】:2013-11-26 14:56:43
【问题描述】:

我在删除数据库响应中的空格时遇到了一些问题... 即表中的数据是第二个 - ____________________1 下划线我的意思是空格...但是当我显示我的数据时我无法删除这些空格...我该怎么做?

我已经尝试过TRIM(), LTRIM(), ALLTRIM(), REPLACE(), STRREPLACE(),但他们无法使用我的visual fox pro 数据库...

谁能帮我解决我的问题?

统一更新: 现在我只是用print_r() 命令显示...但这里有一些代码:

$result = odbc_exec($connect, "select
                                        pacienti.pacientid,
                                        pacienti.f_name,
                                        pacienti.s_name,
                                        napravlenie.rtgapparat,
                                        napravlenie.doctor,
                                        opisanie_rtg.opis,
                                        apparatura.prefiks
                                    from
                                        pacienti left outer join napravlenie on pacienti.pacientid = napravlenie.pacientid
                                            left outer join opisanie_rtg on pacienti.pacientid = opisanie_rtg.pacientid
                                                left outer join apparatura on napravlenie.rtgapparat = STUFF(apparatura.gruppa, 0, ' ', '')
                                    where
                                        pacienti.pacientid = '".$pk_full."'") or die ("Error in Database: ".odbc_errormsg());

    $all = array();
    while($row = odbc_fetch_array($result))
    {
        $all[] = $row;
    }

    echo "<pre>";
    print_r($all);

【问题讨论】:

  • 您如何显示您的数据?我假设使用 PHP,从标签 - 在这种情况下,您可以在您的问题中添加适当的代码以及一些示例输出吗?
  • @andrewsi 查看我的更新问题
  • 您是否尝试过在 PHP 代码中使用 trim() 看看是否有帮助? trim($all['pacientid']),等等?这有什么不同吗?
  • @andrewsi 不,它什么也没做=(
  • 在这种情况下,您可以尝试var_dump($row['pacientid']) 并将输出编辑到您的问题中吗?当从数据库中检索到该字段时,这将准确显示该字段中的内容。正如 Dave Collins 所说 - 它们可能不是真正的空间。

标签: php sql visual-foxpro


【解决方案1】:

试试 STRTRAN(string_field, ' ','')

【讨论】:

  • 也许你的“空格”并不是真正的空格。您可以将输出转储到十六进制编辑器并查看实际字符吗?您可能会收到一些 ASCII 或 unicode 不可打印的字符。如果你能算出确切的值,你可以把它们STRTRAN。
  • 很高兴听到这个消息。多年未在 VFP 工作,但很高兴知道我还有一些脑细胞!
  • 对于未来的读者,STRTRAN 是 VFP 的查找和替换功能的等效功能。这与修剪不同,它将替换单元格值中的所有空格。谨慎使用。
【解决方案2】:

.DBF(dBase/Foxpro 表)字符字段用空格填充,因此我建议您使用select alltrim(pacienti.f_name) as f_name,... 删除前导和尾随空格。

【讨论】:

  • 出于某种原因,我发现这会删除起始空格,但不会删除尾随空格。我想我将不得不在查询之外进行修剪。
【解决方案3】:

如今,对于大多数数据库系统,您都可以使用可变宽度字段。问题在于本机 VFP 行为是为表中的每一列分配固定数量的空间。当您在 VFP 中执行 SQL 语句时,它会查看第一条记录以确定每个字段的类型和大小,并相应地创建结果游标/表结构。

例如,如果您有一个表的第一列定义为 Char(50),那么 VFP 将在该字段中分配 50 个空格(不是空字符),以便您的字符串在每行上正好有 50 个字符长。

当您尝试使用 Select Alltrim(field), ... from table 时,如果第一条记录的第一列找到字符串“现在是时间”,那么第一列的宽度将为 15 个字符,并且所有后续行都将被填充或修剪,但所有行都是 15 个字符。

您可以通过创建一个包含不同数量的文本/空白的几行和一列的表格来进行试验。那就试试吧

SELECT alltrim(field1) FROM mytable ORDER BY len(alltrim(field1)) INTO CURSOR 结果

结果将是所有行将仅与源数据中最短的字符串一样宽。

这意味着您的所有修剪都需要在您运行查询之后进行,并且不能作为查询的一部分进行。

【讨论】:

    【解决方案4】:

    我知道这是一个非常古老的问题,但我刚刚发现了一种方法

    SELECT CAST(columnName as varchar(len(TRIM(columnName)))) FROM table
    

    这不是编写查询的好方法,但似乎可以正确裁剪它。

    如上所述,STRTRAN 替换列中的所有空格,所以如果你有

    "John Smith    "
    

    变成了

    "JohnSmith"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多