将 MySQL 日期转换为 PostgreSQL 日期
Convert MySQL date to PostgreSQL date
已更新(已解决):“2000-00-00”不是有效日期。您必须指定月份和日期的值 - 即“2000-01-01”
我是 PostgreSQL 的新手。我想知道如何将 MySQL 日期 (YYYY-MM-DD) 转换为 PostgreSQL。我应该在 PostgreSQL 中使用什么类型的值来设置像 YYYY-MM-DD 这样的日期?
如果不可能,那么我如何将 YYYY-MM-DD 转换为 PHP 中的正确值(PostgreSQL 的正确 type\value 是什么)?
非常感谢。
查询示例(2000-00-00发行)
INSERT INTO "user" ("user_uni", "user_id", "name", "city", "country", "sex", "birthday", "referal_id", "social_network", "offer_balance", "customer_balance", "registration_time", "last_visit_time", "last_ip", "banned", "fit_actions", "token", "mail", "neverban", "last_api_request", "notify", "vip", "filters_free", "friends", "rate", "discount", "invite_day", "have_invites", "like_public_day", "have_like_public", "last_login", "suspected", "group_counter", "password") VALUES ('1', '19922', 'Иван Иванов', '243', '1', '1', '1988-01-07', '0', '1', '201.770', '500.000', '1352880961', '13533290', '178.150.243.214', '0', '0', '', '', '0', '0', '0', '0', '0', '0', '100.000', '0', '2000-00-00', '0', '2000-00-00', '0', '13533290', '0', '0', '')
PostgreSQL recommend 您对日期使用 YYYY-MM-DD 样式,因此您不需要进行任何转换。
SELECT '2015-04-12';
您的问题不是将 MySQL 日期格式转换为 PostgreSQL 日期格式。两者都默认使用 ISO 日期格式 (YYYY-MM-DD)。
问题是older MySQL versions were lax about what is considers a valid date。 2 月 31 日?好没问题。第零个月的第零日期?随便。
较新的版本 "fix" 通过将无效日期静默转换为 0000-00-00
(它本身也是一个无效日期,但 MySQL 接受它)。在 strict mode, which should always be used with MySQL, it generates an error instead. See the manual.
PostgreSQL 强制执行日期有效性,因此它不会接受 2000-00-00
。那不是约会,那是胡说八道。它还拒绝 0000-00-00
,这会给 MySQL 用户带来很多问题,因为 MySQL 使用 0000-00-00
作为日期的一种伪空或 NaN,"valid" 实际上无效的日期。
您最好的选择是在导入数据之前更正这些日期。如果您将它们用作未知日期的占位符,请使用 NULL
。 (您需要调整依赖于 <
、>
、=
等的查询,因为它们的行为会有所不同)。
已更新(已解决):“2000-00-00”不是有效日期。您必须指定月份和日期的值 - 即“2000-01-01”
我是 PostgreSQL 的新手。我想知道如何将 MySQL 日期 (YYYY-MM-DD) 转换为 PostgreSQL。我应该在 PostgreSQL 中使用什么类型的值来设置像 YYYY-MM-DD 这样的日期?
如果不可能,那么我如何将 YYYY-MM-DD 转换为 PHP 中的正确值(PostgreSQL 的正确 type\value 是什么)?
非常感谢。
查询示例(2000-00-00发行)
INSERT INTO "user" ("user_uni", "user_id", "name", "city", "country", "sex", "birthday", "referal_id", "social_network", "offer_balance", "customer_balance", "registration_time", "last_visit_time", "last_ip", "banned", "fit_actions", "token", "mail", "neverban", "last_api_request", "notify", "vip", "filters_free", "friends", "rate", "discount", "invite_day", "have_invites", "like_public_day", "have_like_public", "last_login", "suspected", "group_counter", "password") VALUES ('1', '19922', 'Иван Иванов', '243', '1', '1', '1988-01-07', '0', '1', '201.770', '500.000', '1352880961', '13533290', '178.150.243.214', '0', '0', '', '', '0', '0', '0', '0', '0', '0', '100.000', '0', '2000-00-00', '0', '2000-00-00', '0', '13533290', '0', '0', '')
PostgreSQL recommend 您对日期使用 YYYY-MM-DD 样式,因此您不需要进行任何转换。
SELECT '2015-04-12';
您的问题不是将 MySQL 日期格式转换为 PostgreSQL 日期格式。两者都默认使用 ISO 日期格式 (YYYY-MM-DD)。
问题是older MySQL versions were lax about what is considers a valid date。 2 月 31 日?好没问题。第零个月的第零日期?随便。
较新的版本 "fix" 通过将无效日期静默转换为 0000-00-00
(它本身也是一个无效日期,但 MySQL 接受它)。在 strict mode, which should always be used with MySQL, it generates an error instead. See the manual.
PostgreSQL 强制执行日期有效性,因此它不会接受 2000-00-00
。那不是约会,那是胡说八道。它还拒绝 0000-00-00
,这会给 MySQL 用户带来很多问题,因为 MySQL 使用 0000-00-00
作为日期的一种伪空或 NaN,"valid" 实际上无效的日期。
您最好的选择是在导入数据之前更正这些日期。如果您将它们用作未知日期的占位符,请使用 NULL
。 (您需要调整依赖于 <
、>
、=
等的查询,因为它们的行为会有所不同)。