我是Visual FoxPro上的新手,我有一个问题,试图用visual fox pro转换字符串日期mysql格式的字符串。
我已经从Visual Fox Pro应用程序中选择了MySQL表行,并将结果集存储在FoxPro游标中,但是现在我需要转换该列(针对每行)的值,该列的值不是Mysql日期列,而是具有mysql日期格式(YYYY-MM-DD)的字符列,因此我尝试了这样的方法:` `SCAN用CTOD替换date_column (‘date_column’)
ENDSCAN`
但是它不工作:(
有谁能帮帮我吗?
发布于 2017-07-12 04:41:00
如果该列是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)有很多其他方法可以做到这一点,但只要你知道格式总是相同的,这应该会很好地工作。
发布于 2017-07-12 04:55:17
请记住,当您对“外部”非本地数据库执行SQL查询时,您必须使用该数据库的SQL语法(在本例中使用VFPSQL语法,而不是MySQL的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数据表中使用的字段类型-字符、日期、DateTime等等。
然后,如果需要,使用适当的SQLSQL语法将其转换为MySQL查询结果中日期的字符表示形式。
现在,有了查询结果中日期的字符值,您可以使用Tamar上面的例程(嵌套在SCAN/ENDSCAN中)来转换每个记录的日期-尽管这种新的值类型将需要进入新的VFP字段,因为现有的字段是字符类型而不是日期类型。
祝好运
发布于 2017-07-13 06:17:42
执行此操作的最佳方法是在从MySQL中进行选择时进行转换。您的SQL将如下所示:
select field1, field2, cast(myCharDate as date) as myDate
from mySQLTable如果要在进入游标后从YYYY-MM-DD格式进行转换,则需要了解几点。游标可以是读/写游标,也可以不是。如果不是,那么您就没有机会直接在该光标上进行更改。如果它是读/写的,那么您不能用Date值替换字符类型字段的值,但是您可以添加另一个date类型的列并替换那里(或者可以简单地将现有列的类型更改为date,如果您设置了date YMD,这也会进行转换)。
但是,最简单的方法是选择另一个光标,如下所示:
select field1, field2, cast('^'+myCharDate as date) as MyDate ;
from crsMyCursor ;
into cursor crsConverted ;
nofilter为什么要在char类型的字段中保留日期值是另一个问题。通常,您会将日期保存在date或timestamp列中,根本不需要转换。在char列中保存日期有其自身的问题,如排序、无法进行日期计算等。
https://stackoverflow.com/questions/45039543
复制相似问题