Visual FoxPro数据库,显示数据中的空格


Visual FoxPro database, spaces in displayed data

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

我已经尝试过TRIM(), LTRIM(), ALLTRIM(), REPLACE(), STRREPLACE(),但它们不适用于我的visual fox pro数据库。。。

有人能帮我解决问题吗?

UPD:现在我只显示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);

尝试STRTRAN(字符串字段,'','')

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

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

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

当您尝试使用Select Alltrim(字段)时。。。从表中,如果第一条记录的第一列找到字符串"now is the time",则第一列的宽度将为15个字符,并且所有后续行都将被填充或修剪,但所有行都将是15个字符。

您可以通过创建一个由几行和一列组成的表来尝试这一点,该表包含不同数量的文本/空白。然后尝试

从mytable ORDER BY len(alltrim(field1))中选择alltrimINTO CURSOR结果

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

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

我知道这是一个很老的问题,但我刚刚发现了一种方法来做

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

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

如上所述,STRTRAN将替换列中的所有空格,因此如果您有

"John Smith    "

它变成

"JohnSmith"