我是Visual FoxPro上的新手,我在尝试使用visual fox pro转换字符串日期mysql格式化字符串时遇到问题。
我从Visual Fox Pro应用程序中选择了MySQL表行,并将结果集存储在FoxPro游标中,但现在我需要转换该列的值(对于每一行)日期,该日期不是Mysql日期列而是char具有mysql日期格式(YYYY-MM-DD)的列,所以我尝试过这样的事情: `SCAN 用CTOD替换date_column(' date_column')
ENDSCAN`
但它不起作用:(
是的,有人可以帮我吗?答案 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列中保留日期有其自身的问题,如排序,日期数学无能等等。