【问题标题】:How to convert from MySQL date string YYY-MM-DD into Visual FoxPro/DBF Date format如何将 MySQL 日期字符串 YYYY-MM-DD 转换为 Visual FoxPro/DBF 日期格式
【发布时间】:2017-07-11 16:05:01
【问题描述】:

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

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

ENDSCAN`

但它不起作用:(

谁能帮帮我?

【问题讨论】:

    标签: mysql visual-foxpro


    【解决方案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)
    

    还有很多其他方法可以做到这一点,但只要您知道格式始终相同,这应该可以很好地工作。

    【讨论】:

      【解决方案2】:

      请记住,当您对“外部”非本地数据库执行 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 查询结果中日期的字符表示。

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

      祝你好运

      【讨论】:

        【解决方案3】:

        执行此操作的最佳方法是在从 MySQL 中选择时进行转换。您的 SQL 如下所示:

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-03
          • 1970-01-01
          • 1970-01-01
          • 2018-05-19
          • 2016-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多