如何将MySQL日期字符串YYY-MM-DD转换为Visual FoxPro / DBF日期格式

时间:2017-07-11 16:05:01

标签: mysql visual-foxpro

我是Visual FoxPro上的新手,我在尝试使用visual fox pro转换字符串日期mysql格式化字符串时遇到问题。

我从Visual Fox Pro应用程序中选择了MySQL表行,并将结果集存储在FoxPro游标中,但现在我需要转换该列的值(对于每一行)日期,该日期不是Mysql日期列而是char具有mysql日期格式(YYYY-MM-DD)的列,所以我尝试过这样的事情: `SCAN         用CTOD替换date_column(' date_column')

ENDSCAN`

但它不起作用:(

是的,有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

如果列是MySQL中的日期列,请将其作为日期提交。如果没有,使用已知格式的最佳选择是解析它并使用DATE()函数构建日期变量:

LOCAL nYear, nMonth, nDay, dDate
nYEAR = LEFT(m.cYourDate, 4)
nMonth = SUBSTR(m.cYourDate, 6, 2)
nDay = SUBSTR(m.cYourDate, 9, 2)
dDate = DATE(m.nYear, m.nMonth, m.nDay)

还有很多其他方法可以做到这一点,但只要你知道格式总是一样的,这应该很好用。

答案 1 :(得分:1)

请记住,当您在“外部”非本机数据库中执行SQL查询时,您必须在初始查询中使用该数据库的SQL语法(在这种情况下使用MySQL SQL语法而不是VFP的SQL语法)来自“外部”非本地数据表的数据。

例如:

* --- Within your VFP code, establish your Connection into the MySQL Database ---
* --- Something like the following... ---
iHandle = SQLSTRINGCONNECT("Driver={MySQL ODBC 5.1 Driver};Server=xxxxx;Port=3306;Database=arc;User=xxxx;Password=xxxx;Option=3;",.t.)
* --- Now execute your MySQL SQL syntax query ---
* --- And get the results back into your VFP Cursor named: crsData ---
SQLEXEC("SELECT 12345 AS id FROM arc_data", "crsData")

首先,确定您在MySQL数据表中使用的字段类型 - 字符,日期,日期时间等等。

然后,如果需要,使用适当的MySQL SQL语法将其转换为SQL查询结果中Date的Character表示形式。

现在使用查询结果中Date的Character值,您可以使用上面的Tamar例程(嵌套在SCAN / ENDSCAN中)来转换每个记录的日期 - 尽管这个新值类型需要进入新的VFP字段因为现有字段是字符类型而不是日期类型。

祝你好运

答案 2 :(得分:1)

这样做的最佳方法是在从MySQL中进行选择时进行转换。您的SQL看起来像:

select field1, field2, cast(myCharDate as date) as myDate
from mySQLTable

如果要在进入光标后从YYYY-MM-DD格式转换,您需要知道几点。光标可能是也可能不是读/写光标。如果不是,那么您就没有机会直接在该光标上进行更改。如果它是可读/写的,那么您不能用日期值替换字符类型字段的值,但您可以添加另一列日期类型并替换它(或者可能只是更改现有列' s类型到目前为止,如果你设置日期YMD,它也会进行转换。

但是,最简单的方法是选择另一个游标,如:

select field1, field2, cast('^'+myCharDate as date) as MyDate ;
from crsMyCursor ;
into cursor crsConverted ;
nofilter

为什么在char类型字段中保留Date值是另一个问题。通常,您会将日期保留在日期或时间戳列中,并且根本不需要转换。在char列中保留日期有其自身的问题,如排序,日期数学无能等等。