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

时间:2013-11-26 14:56:44

标签: php sql visual-foxpro

我在删除数据库响应中的空格时遇到了一些问题... 表中的数据是第二个 - ____________________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);

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

您可以通过创建包含不同数量的文本/空白区域的少数行和单个列的表来进行此试验。然后尝试

  

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

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

这意味着您需要在运行查询后进行所有修剪,而不能将其作为查询的一部分来完成。

答案 3 :(得分:0)

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

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

这不是编写查询的好方法,但它看起来确实可以正确裁剪。

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

"John Smith    "

变成

"JohnSmith"