AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-4262571

John Beasley's questions

Martin Hope
John Beasley
Asked: 2025-01-01 02:53:41 +0800 CST

更新一定数量记录的连续日期

  • 4

我有一张 MySQL 5.7 表。

我需要为 9000 条记录设置连续的日期。

前 300 条记录将有 2025-01-02。

接下来的 300 条记录将是 2025-01-03。

依此类推,直到所有 9000 个都已更新,直到最后日期 2025-01-31。

有没有办法通过单个查询做到这一点?

我不想重复这个 30 次:

UPDATE table SET date = '2025-01-02' ORDER RAND() LIMIT 300;

这是我尝试过的:

SET @row_num = 0;
SET @start_date = '2025-01-02';

UPDATE `DISTRIBUTION`
  JOIN (
    SELECT 
    `email`, 
    @row_num := @row_num + 1 AS row_num
FROM `DISTRIBUTION`
) AS numbered_rows ON `DISTRIBUTION`.`email` = 
numbered_rows.`email`
SET `DISTRIBUTION`.`date_column` = DATE_ADD(@start_date, 
INTERVAL FLOOR((row_num - 1) / 300) DAY)
WHERE `LIST` = 'list1' AND `DOMAIN` = 'GM';

但尝试之后,它却将记录设置为 2040 年代和 1930 年的日期。

mysql
  • 1 个回答
  • 39 Views
Martin Hope
John Beasley
Asked: 2024-12-03 23:09:35 +0800 CST

更新抛出警告而不是错误并继续运行

  • 6

在我之前的问题中(当日期可用时 str_to_date 显示 NULL),我试图将 VARCHAR 日期时间更新为日期格式。

这是我正在使用的更新查询:

UPDATE `table` SET `dateColumn` = CASE 
  WHEN `dateColumn` = '' THEN NULL 
  ELSE date_format(str_to_date(`dateColumn`, '%m-%d-%Y %h:%i:%s %p'), '%Y-%m-%d') END;

上述查询应在 dateColumn 中查找日期。如果日期为空,则将其设置为 NULL。否则,更改日期格式。

我注意到的是,如果 dateColumn 与我指定的格式不匹配,查询不会停止查询并产生错误,而是会发出一条警告,内容如下:

Warning: #1411 Incorrect datetime value: '9/9/2024 12:00:00 AM' for function str_to_date

我知道格式是错误的,因为有斜线而不是破折号。

问题是,当我收到上述警告时,查询继续运行,但将所有日期(无论是否为空白)更改为 NULL。

我不希望查询将所有日期标记为 NULL。只标记空白日期。出于某种原因,这种情况不会发生,当这种情况发生时,我必须截断数据并再次导入并重新开始。

查询因错误而停止发生了什么?

为什么我却收到警告?

为什么查询会将所有日期更改为 NULL?

我是否需要更新查询,以便它不会将所有日期更改为 NULL?如果需要,该怎么做?

mysql
  • 1 个回答
  • 21 Views
Martin Hope
John Beasley
Asked: 2024-12-03 05:30:33 +0800 CST

当日期可用时,str_to_date 显示为 NULL

  • 4

我使用 UPDATE 查询来修复日期。它与我之前使用的 CASE 语句查询相同。它会检查 VARCHAR 日期是否为空,如果为空,则将其设置为 NULL。否则,更改日期的格式。

由于某种原因,它将所有日期设置为 NULL。

重新导入数据后,我开始使用 SELECT(这可能是更好的做法)。以下是 SELECT:

SELECT `dateColumn`, CASE `dateColumn`
  WHEN '' THEN NULL
  ELSE date_format(str_to_date(`dateColumn`, '%m/%d/%Y %H:%i:%s %P'), '%Y-%m-%d')
  END AS 'NEW DATE'
FROM `table` where `EmailAddress` = '[email protected]';

这给了我以下结果:

      dateColumn      | NEW DATE
----------------------------------------
9/9/2024 12:00:00 AM  | NULL

格式似乎正确。不确定为什么它会将日期更改为 NULL。

请帮忙。

** 编辑 **

我刚刚注意到我收到一条警告,内容是:

Warning: #1411 Incorrect datetime value: '9/9/2024 12:00:00 AM' for function str_to_date

这不太可能是导致错误的原因。

mysql
  • 1 个回答
  • 26 Views
Martin Hope
John Beasley
Asked: 2024-11-25 23:49:01 +0800 CST

获取另一个表中存在的记录[重复]

  • 0
此问题这里已有答案:
从一个表中选择行,其中另一个表中具有相同 ID 的行在另一列中具有特定值 (3 个答案)
18 小时前关闭。

我正在尝试从一个表中获取另一个表中存在的电子邮件。

我的查询如下所示:

SELECT `email` FROM `table1` WHERE EXISTS (select `email` from `table2`);

上述查询返回第二个表中没有记录的数据集。

table2 有 250k 条记录,它是从有 3500 万条记录的 table1 创建的,所以我知道这两个表中都存在电子邮件。

我只想从表 1 中选择表 2 中存在的记录。

我希望这是有道理的。

我该如何写才能让它发挥作用?

mysql
  • 1 个回答
  • 38 Views
Martin Hope
John Beasley
Asked: 2024-11-21 21:58:10 +0800 CST

如果另一个表中存在数据,则使用 Y 或 N 更新列

  • 3

我有一张 MySQL 5.7 表,其中有 800 万条不同的电子邮件记录。

我还有另一张表,其中有大约 200 万条记录,且电子邮件各不相同。

我想查看较大表中存在于较小表中的电子邮件。

我在我的较大表格中添加了一列并将其命名为“它” in_2nd_table,然后将其留空。

然后我写了一个如下查询:

UPDATE `mainTable` set `in_2nd_table` = 
  CASE WHEN `email` IN (SELECT `email` FROM `2ndTable`) THEN 'Y' ELSE 'N' END;

但我猜这些表太大了,查询总是出错。我不断得到类似这样的 500:https ://i.sstatic.net/0bn2R.png

我也尝试创建这样的表格:

CREATE TABLE `test` AS SELECT * FROM `mainTable` WHERE `email` NOT IN (SELECT `email` FROM `2ndTable`);

但它也不断出错,抛出同样的 500 错误。

表上没有索引。我尝试在较大的表上添加索引,但再次出现 500 错误。

我只是想看看大表中的哪些记录存在于小表中。

我怎样才能让它工作?

mysql
  • 2 个回答
  • 40 Views
Martin Hope
John Beasley
Asked: 2024-11-07 02:42:23 +0800 CST

转换奇怪的日期时间格式

  • 4

在我的一个 MySQL 5.7 表中,有一列具有奇怪的日期时间格式。它看起来像这样:

2024-08-09 20:57:31.4477

我正在尝试使用此查询将其转换为日期格式 m/d/Y。以下是我目前正在尝试的操作:

update table set `column1` = 
CASE column1
    WHEN '' THEN NULL 
    ELSE date_format(str_to_date(`column1`, '%Y-%m-%d %H:%i:%s %P'), '%m/%d/%Y')
END;

但我收到以下错误:

Incorrect datetime value: '2024-08-09 20:57:31.4477' for function str_to_date

当尝试比较日期时间列时,我也使用了这种格式: '%Y-%m-%d %H:%i:%s %p'但我收到了同样的错误。

对于上述日期时间,我应该在 str_to_date 中使用什么格式?

我尝试使用这些格式:

'%Y-%m-%d %H:%i:%s.%P'
'%Y-%m-%d %H:%i:%s.%p'
'%Y-%m-%d %H:%i:%s.%s'

仍然出现同样的错误。

datetime
  • 2 个回答
  • 39 Views
Martin Hope
John Beasley
Asked: 2024-11-05 04:22:57 +0800 CST

函数 str_to_date 的日期时间值不正确:' '

  • 5

在 MySQL 5.7 中,我有一个 varchar 列,其中包含如下所示的字符串日期时间:

`2024-09-03 02:00:07`

我可以运行这个查询:

select date_format(str_to_date(`column1`, '%Y-%m-%d %H:%i:%s'), '%m/%d/%Y')  from table;

这将以如下格式返回 column1 的日期:

09/03/2024

但是当我运行这个更新查询时:

update table set `column1` = date_format(str_to_date(`column1`, '%Y-%m-%d %H:%i:%s'), '%m/%d/%Y');

我收到以下错误:

Incorrect datetime value: '' for function str_to_date

该列中有一些空值。我将表的结构更新为该DEFAULT: NULL列,并选中了 Null 复选框:

在此处输入图片描述

我该如何修复此问题以便它能够相应地更新?

mysql
  • 1 个回答
  • 28 Views
Martin Hope
John Beasley
Asked: 2024-10-16 22:40:57 +0800 CST

在端点接收无效凭证

  • 3

我正在 Postman 中研究 Webhook API。

在 Postman 中,我在 Headers 中输入了用户名、密码和帐户代码。然后我将以下有效负载直接发送到网站的端点:

{
  "email": "[email protected]",
  "overwrite": true,
  "fields": {
    "first_name": "John",
    "last_name": "Doe",
    "country": "Chile",
    "mrc_c3": "300.00",
    "mrc_date_c3": "10/16/24"
  }
}    

使用上述方法,我得到了 200 OK 响应。

我可以登录网站并查看更新。

当我尝试将相同的有效负载发送到 PHP 脚本端点时出现了问题。

在 PHP 端点内,我能够提取与上述相同的有效负载,并将每个参数设置为它自己的 PHP 变量。

在 PHP 脚本端点内,我手动设置用户名、密码和帐户代码。

回到 Postman,我随后仅将有效负载发送到 PHP 脚本端点。

我在 Postman 中收到 200 OK 响应,但在响应正文中,我回显了状态,并收到了 401 状态,这告诉我登录凭据不正确。

以下是 PHP 脚本:

<?php
  $payload = json_decode(file_get_contents("php://input"), true);

  $email = $payload["email"];
  $firstName = $payload['fields']['first_name'];
  $lastName = $payload['fields']['last_name'];
  $country = $payload['fields']['country'];
  $mrc_c3 = $payload['fields']['mrc_c3'];
  $mrc_date_c3 = $payload['fields']['mrc_date_c3'];

  $url = "https://original.endpoint.com/";
  $xun = "USERNAME";
  $xpw = "PASSWORD";
  $xac = "ACCOUNT CODE";

  $content = '{
    "email": "' . $email . '",
    "overwrite": true,
    "fields": { 
            "first_name": "' . $firstName . '",
            "last_name": "'.$lastName.'",
            "country": "' . $country . '",
            "mrc_c3": "' . $mrc_c3 . '",
            "mrc_date_c3": "' . $mrc_date_c3 . '"
        }
   }';
  }';

$curl = curl_init( $url );
curl_setopt( $curl, CURLOPT_HEADER, false );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_HTTPHEADER, array(
     "Content-type: application/json",
    "USERNAME: $xun",
    "PASSWORD: $xpw",
    "ACCOUNT_CODE: $xac" 
) );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, $content );
$json_response = curl_exec( $curl );
$status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );

if ( $status != 200 && $status != 201 ) {
    error_log( "Error: call to URL $url failed with status $status, response $json_response, curl_error " . curl_error( $curl ) . ", curl_errno " . curl_errno( $curl ) );
}

echo "status: " . $status;  // <-- print the status in Postman

curl_close( $curl );

$response = json_decode( $json_response, true );
?>

让我重申一下,我从 Postman 本身获得了 200 OK 响应,但是当我从 PHP 脚本内部打印出状态时,我获得了 401 响应。

屏幕截图供参考:

在此处输入图片描述

PHP 脚本中的凭据确实正确。所以我不确定为什么我会收到 401 响应。

请帮忙。

当我将 json_decode 更改为 json_encode 时,我可以像这样 print_r 有效负载:

print_r($payload);

它在 Postman 中的显示如下:

"{\n \"email\": \"[email protected]\",\n \"overwrite\": true,\n \"fields\": {\n \"first_name\": \"John\",\n
\"last_name\": \"Doe\",\n \"country\": \"Chile\",\n \"mrc_c3\": \"300.00\",\n \"mrc_date_c3\": \"10\/16\/24\"\n }\n}"
  • 1 个回答
  • 29 Views
Martin Hope
John Beasley
Asked: 2024-10-16 04:16:57 +0800 CST

在 PHP 中打印 Webhook API 有效负载[重复]

  • 0
此问题这里已有答案:
如何使用 PHP 从 JSON 中提取和访问数据? (2 个答案)
昨天休息。

我正在使用 POST 将以下有效负载从 Postman 发送到 PHP 端点:

{
  "email": "[email protected]",
  "overwrite": true,
  "fields": {
    "first_name": "John Doe",
    "country": "Chile",
    "mrc_c3": "25.00",
    "mrc_date_c3": "10/10/24"
  }
}

在 PHP 脚本中,我有以下代码:

<?php
  require_once("db.php");

  $payload = json_decode(file_get_contents("php://input"), true)["payload"];

  echo "this is the payload: " . $payload[];
?>

正如您在上面看到的,我试图仅回显有效载荷数组,但 Postman 仅打印出“这是有效载荷”而不打​​印其他任何内容。

我如何编辑上述代码以便它显示我从 Postman 发送的有效负载?

  • 1 个回答
  • 34 Views
Martin Hope
John Beasley
Asked: 2024-10-08 02:29:11 +0800 CST

排除一系列日期列中包含 3 个或更多日期的记录

  • 5

我正在使用使用 MySQL 版本 5.7 的 phpMyAdmin。

我有一个名为的数据库表condensed,其中包含数百万封具有多个“发送日期”和其他列的唯一电子邮件。有些电子邮件的发送日期为 NULL。

这里仅关注email和send_date列。

以下是该表的示例:

| email  | a_last_sent | b_last_sent | c_last_sent | d_last_sent | ..up to 14 dates
----------------------------------------------------------------------------------
| email1 | 2024-06-12  | 2024-05-25  |    NULL     | 2024-06-06  |
----------------------------------------------------------------------------------
| email2 | 2024-06-01  | 2024-06-16  |  2024-06-05 | 2024-06-19  |
----------------------------------------------------------------------------------
| email3 |   NULL      |   NULL      |  2024-05-12 | 2024-06-10  |
----------------------------------------------------------------------------------
| email4 |   NULL      | 2024-06-13  |    NULL     | 2024-05-11  |
----------------------------------------------------------------------------------
| email5 | 2024-06-09  | 2024-05-01  |    NULL     |    NULL     |
----------------------------------------------------------------------------------  

我需要排除六月份内发送日期超过 3 个的所有内容。

因此,如果电子邮件的发送日期在 6 月份内的 3 列或以上,请不要返回这些记录。

使用我上面的例子,结果应该是这样的:

| email  | a_last_sent | b_last_sent | c_last_sent | d_last_sent | ..up to 14 dates
----------------------------------------------------------------------------------
| email1 | 2024-06-12  | 2024-05-25  |    NULL     | 2024-06-06  |
----------------------------------------------------------------------------------
| email3 |   NULL      |   NULL      |  2024-05-12 | 2024-06-10  |
----------------------------------------------------------------------------------
| email4 |   NULL      | 2024-06-13  |    NULL     | 2024-05-11  |
----------------------------------------------------------------------------------
| email5 | 2024-06-09  | 2024-05-01  |    NULL     |    NULL     |
----------------------------------------------------------------------------------  

上面的结果被排除,email2因为它在六月份内有 4 个日期。

email1符合条件,因为它在 6 月份只有 2 个日期,在 5 月份只有 1 个日期。

email3、、email4和email5符合条件,因为它们在 6 月份只有 1 个日期,在 5 月份只有 1 个日期。

我可以编写以下查询:

SELECT 
  * FROM 
`condensed` 
WHERE 
(
  `a_last_sent` NOT BETWEEN '2024-06-01' AND '2024-06-30'
  OR
  `b_last_sent` NOT BETWEEN '2024-06-01' AND '2024-06-30'
  OR
  `c_last_sent` NOT BETWEEN '2024-06-01' AND '2024-06-30' 
  // remaining date columns     
)

上述查询排除了日期范围内的任何内容。

我只是不确定如何合并计数以排除指定日期范围内超过 3 个日期的任何内容(在本例中为 6 月)。

请帮忙,谢谢。

mysql
  • 2 个回答
  • 37 Views
Martin Hope
John Beasley
Asked: 2024-10-03 04:05:06 +0800 CST

在一个查询中从表获取计数和日期并从另一个表获取计数和日期

  • 2

我有一个查询,它从表中获取计数和日期。它看起来像这样:

SELECT 
 date(`date`) as 'Date'
 , sb.`send_id`
 , count(`id`) as 'SUBS' 
FROM `table1`
WHERE `date` BETWEEN '2024-09-01%' AND '2024-09-30%'
GROUP BY date(`date`), `send_id`;

这会给我如下结果:

|    DATE    |   SEND_ID    |   SUBS    |
-----------------------------------------
| 2024-09-01 |  1111111     |    1900   | 
| 2024-09-01 |  2222222     |    1835   | 
| 2024-09-02 |  1111111     |    264    | 
| 2024-09-02 |  2222222     |    26     | 
-----------------------------------------

我有第二个查询,如下所示:

SELECT 
  date(`o_date`)
  , `o_send_id`
  , count(`id`) AS 'UNI'
FROM `table2`
WHERE `o_date` BETWEEN '2024-09-01%' AND '2024-09-30%'
GROUP BY date(`o_date`), `o_send_id`;

这得到如下结果:

|    O_DATE    |   O_SEND_ID    |   UNITS  |
--------------------------------------------
| 2024-09-01   |    1111111     |    107   | 
| 2024-09-01   |    2222222     |    360   | 
| 2024-09-02   |    1111111     |    223   | 
| 2024-09-02   |    2222222     |    209   | 
--------------------------------------------    

我想要做的是连接这些表以显示 SUB 和 UNITS。

因此结果看起来应该是这样的:

|    DATE    |   SEND_ID    |   SUBS    |   UNITS |
---------------------------------------------------
| 2024-09-01 |  1111111     |    1900   |   107   |
| 2024-09-01 |  2222222     |    1835   |   360   |
| 2024-09-02 |  1111111     |    264    |   223   |
| 2024-09-02 |  2222222     |    26     |   209   |
---------------------------------------------------

这是我尝试在单个日期连接表格的操作:

SELECT 
  date(tb1.`date`) as 'Date'
  , tb1.`send_id`
  , count(tb1.`id`) as 'SUBS' 
  , count(tb2.`id`) as 'UNITS'
FROM `table1` tb1
JOIN `table2` tb2 ON tb2.`o_send_id` = tb1.`send_id` AND tb2.`o_date` = tb1.`date`
WHERE (tb1.`date` BETWEEN '2024-09-01%' AND '2024-09-30%')
GROUP BY date(tb1.`date`), tb1.`send_id`;

它运行了一段时间,但最终还是崩溃了。我猜是因为有相当多的记录(数百万条)。我收到一条错误消息:

Error in processing request
Error code: 500
Error text: Internal Error (rejected)
It seems that the connection to server has been lost.
Please check your network connectivity and server status.

因此我尝试运行相同的查询,但这次只使用 1 个日期和 1 个 send_id,如下所示:

SELECT 
  date(tb1.`date`) as 'Date'
  , tb1.`send_id`
  , count(tb1.`id`) as 'SUBS' 
  , count(tb2.`id`) as 'UNITS'
FROM `table1` tb1
JOIN `table2` tb2 ON tb2.`o_send_id` = tb1.`send_id` AND tb2.`o_date` = tb1.`date`
WHERE (tb1.`date` LIKE '2024-09-30%') AND tb1.`send_id` = '1111111'
GROUP BY date(tb1.`date`), tb1.`send_id`;    

该查询运行,但我得到如下结果:

|    DATE    |   SEND_ID    |   SUBS     |   UNITS   |
------------------------------------------------------
| 2024-09-30 |  1111111     |    35960   |   35960   |
------------------------------------------------------

尽管查询成功运行,但我不确定 SUBS 和 UNITS 发生了什么,因为它们的结果都是 36960。总数应该不同,而且不应该那么高。

不确定我做错了什么。

在我之前问过的一个问题中,有人建议我发布表格描述。

以下是表 1 的描述:

| Field   |   Type        | Null | Key  | Default |         Extra       |
-------------------------------------------------------------------------
| id      | int(11)       |  NO  |  PRI |  NULL   |  AUTO_INCREMENT     |  
| send_id | varchar(255)  |  YES |      |  NULL   |                     |   
| date    | datetime      |  YES |      |  NULL   |                     |
-------------------------------------------------------------------------

以下是表2的描述:

| Field     |   Type        | Null | Key  | Default |         Extra       |
---------------------------------------------------------------------------
| id        | int(11)       |  NO  |  PRI |  NULL   |  AUTO_INCREMENT     |  
| o_send_id | varchar(255)  |  YES |      |  NULL   |                     |    
| o_date    | datetime      |  YES |      |  NULL   |                     |
---------------------------------------------------------------------------  

每个表的描述都没有什么特别之处。

综上所述,请帮我弄清楚如何在同一个查询中显示 SUBS 计数和 UNIT 计数。

表 1 的索引如下。

在此处输入图片描述

这是表2的索引。

在此处输入图片描述

我只用ID。

mysql
  • 2 个回答
  • 40 Views
Martin Hope
John Beasley
Asked: 2024-10-02 22:18:53 +0800 CST

获取每天的 ID 数量并按日期分组

  • 4

目前,我有一个如下的查询:

SELECT send_id, count(id) FROM `table1`
WHERE date BETWEEN '2024-09-01%' AND '2024-09-30%'
GROUP BY send_id;

这将返回如下结果:

|   send_id   |   count(id)   |
-------------------------------
|    00123    |       32      |  
|    00234    |       12      | 
|    00567    |      100      | 
|    00890    |       07      | 
-------------------------------

我想添加日期并获取每天每个 send_id 的计数。

我写了这个查询:

SELECT DATE(date) as 'date', send_id, count(id) FROM `table1`
WHERE date BETWEEN '2024-09-01%' AND '2024-09-30%'
GROUP BY date, send_id;    

我使用 DATE(date),因为日期列是日期时间。我不需要时间,只需要日期。

我得到的结果如下:

|     date    |   send_id   |   count(id)   |
---------------------------------------------
| 2024-09-01  |    00123    |       03      |  
| 2024-09-01  |    00123    |       10      | 
| 2024-09-01  |    00567    |       20      | 
| 2024-09-01  |    00567    |       05      | 
---------------------------------------------

我想要的结果应该是这样的:

|     date    |   send_id   |   count(id)   |
---------------------------------------------
| 2024-09-01  |    00123    |       13      |  
| 2024-09-01  |    00567    |       25      | 
---------------------------------------------

因为 send_id 在 2024-09-01 的总 id 数为 13,但它将其分成 2 行。

id 是 auto_incremented 字段。

我认为这是因为日期时间,但我不确定。

我如何修复查询以便它获取每天每个 send_id 的 id 计数?

sql
  • 5 个回答
  • 51 Views
Martin Hope
John Beasley
Asked: 2024-09-13 04:32:55 +0800 CST

MySQL 列将检查日期列是否超过 30 天

  • 5

不确定这是否可能...

我有一张带有日期列的表last_sent_date。

我想添加一个名为“sent_last_30_days”之类的附加列。

此列将查看该last_sent_date列并检查日期是否在过去 30 天内。如果是,则用 1 标记。如果不是,则用 0 标记。

因此结果看起来应该是这样的:

| email  | last_sent_date | sent_last_30_days |
----------------------------------------------
| email1 | 2024-07-10     |         0         |
----------------------------------------------
| email2 | 2024-08-22     |         1         |
----------------------------------------------
| email3 | 2024-09-01     |         1         | 
----------------------------------------------
| email4 | 2024-06-05     |         0         |
----------------------------------------------

我知道这可以在 Excel 中完成,但由于我要处理 3500 万条记录,所以 Excel 有点不可能。

这可以在 MySQL 中实现吗?该函数是什么样子的?

sql
  • 1 个回答
  • 63 Views
Martin Hope
John Beasley
Asked: 2024-09-04 02:00:38 +0800 CST

Varchar str_to_date 不正确的日期时间值

  • 5

我在将 CSV 导入 MySQL 表时遇到了问题,因为我无法使 DATE 或 DATETIME 字段正常工作。我尝试使用 LOAD DATA INFILE,但没有成功。

因此我将所有 DATE 或 DATETIME 字段更改为 VARCHAR,并且最终加载了所有数据。

但现在我需要更新 VARCHAR 字段中的日期以仅显示如下日期格式:

yyyy-mm-dd

因此我尝试运行这个查询:

UPDATE `table` SET 
  `CreatedDate` = STR_TO_DATE(CreatedDate, '%Y-%M-%D'), 
  `LastClickDate` = STR_TO_DATE(LastClickDate, '%Y-%M-%D'), 
  `LastOpenDate` = STR_TO_DATE(LastOpenDate, '%Y-%M-%D'), 
  `LastSendDate` = STR_TO_DATE(LastSendDate, '%Y-%M-%D'), 
  `LastUnsubscribeDate` = STR_TO_DATE(LastUnsubscribeDate, '%Y-%M-%D')

但我收到以下错误:

Incorrect datetime value: '6/25/2024 5:19:22 PM' for function str_to_date

数据库表日期列具有类似以下的结构:

ColumnName: CreatedDate 
Type: varchar(30)
Collation: utf8mb4_general_ci
Attributes: Yes
Default: NULL

我如何使上述查询正常工作,以便日期可以以 yyyy-mm-dd 格式显示?

sql
  • 1 个回答
  • 25 Views
Martin Hope
John Beasley
Asked: 2024-09-03 21:09:46 +0800 CST

根据另一列的值更新列

  • 6

我需要根据同一张表中“EMAIL”列的值来更新 MySQL 表中名为“ISP_GROUP”的列。

我在 Excel 中完成了此操作。我使用以下公式根据 A 列中的值(即 EMAILS)填充 ISP_GROUP 列的值:

=IF(COUNTIF(A2,"*@gmail.com*"),"GM",
 IF(COUNTIF(A2,"*@yahoo.com*"),"VMG",
 IF(COUNTIF(A2,"*@aol.com*"),"VMG",
 IF(COUNTIF(A2,"*@sbcglobal.net*"),"VMG",
 IF(COUNTIF(A2,"*@att.net*"),"VMG",
 IF(COUNTIF(A2,"*@ymail.com*"),"VMG",
 IF(COUNTIF(A2,"*@rocketmail.com*"),"VMG",
 IF(COUNTIF(A2,"*@aim.com*"),"VMG",
 IF(COUNTIF(A2,"*@verizon.net*"),"VMG",
 IF(COUNTIF(A2,"*@hotmail.com*"),"MSFT",
 IF(COUNTIF(A2,"*@live.com*"),"MSFT",
 IF(COUNTIF(A2,"*@msn.com*"),"MSFT",
 IF(COUNTIF(A2,"*@outlook.com*"),"MSFT",
 IF(COUNTIF(A2,"*@passport.com*"),"MSFT", "other" ))))))))))))))

因此,上述公式将查看第一列中的 EMAIL。然后,例如,如果电子邮件是“@gmail.com”帐户,则将 ISP_GROUP 值设置为 GM。

我无法再在 Excel 中完成此任务,因为 CSV 中的记录量超出了 Excel 可以处理的数量。

所以现在我必须将 CSV 直接导入到我的 MySQL 表中,然后在上传后更新值。

我只是不知道如何在 MySQL 更新语句中写下上述公式。

因此查询将像这样开始:

UPDATE `table` SET `ISP_GROUP` = 'SOMETHING TO MIMIC THE ABOVE FORMULA';

我不确定如何将 Excel 公式转换为 MySQL 中的查询。

目前,表格如下所示:

|     EMAIL     | ISP_GROUP |
-----------------------------
| [email protected] |           |
| [email protected]   |           |
| [email protected]     |           |
| [email protected]     |           |
-----------------------------

我需要编写的查询将像这样更新 ISP_GROUP:

|     EMAIL     | ISP_GROUP |
-----------------------------
| [email protected] |   MFT     |
| [email protected]   |   GM      |
| [email protected]     |   VMG     |
| [email protected]     |   OTHER   |
-----------------------------
sql
  • 1 个回答
  • 118 Views
Martin Hope
John Beasley
Asked: 2024-08-27 21:18:07 +0800 CST

获取表内计数、电子邮件和关联值

  • 5

跟进这个已关闭的问题(列出所有电子邮件和 ISP 并获取每个属性的数量),我希望最终能找到我正在寻找的解决方案。

我有一张list_all如下所示的表:

|   EMAIL     |    PROPERTY     |   ISP_GROUP    |  LAST_SENT_DATE |
--------------------------------------------------------------------
| email1      |    prop1        |   gmail        |  2024-06-25     |
| email2      |    prop3        |   yahoo        |  2024-06-02     |
| email3      |    prop2        |   other        |  2024-06-15     |
| email1      |    prop5        |   gmail        |  2024-06-16     |
| email1      |    prop6        |   gmail        |  2024-06-22     |
--------------------------------------------------------------------

我可以运行如下查询来统计某个日期之间每封电子邮件的数量:

SELECT 
    COUNT(`email`) as 'EMAIL COUNT'
    , `email` 
    , `isp_group`
FROM `list_all` 
WHERE `last_sent_date` BETWEEN '2024-06-01' AND '2024-06-30'
GROUP BY `email`, `isp_group`
ORDER BY `EMAIL COUNT` DESC

这将输出如下内容:

| EMAIL COUNT    |     email      |   isp_group   |
---------------------------------------------------
|     3          |     email1     |   gmail       |
|     1          |     email2     |   yahoo       |
|     1          |     email3     |   other       |
---------------------------------------------------

我正在尝试找到一种方法来显示属性但保留总数。

也许有一种方法可以在另一列中列出每个属性,但将它们全部放在一个单元格中,如下所示:

| EMAIL COUNT    |     email      |   isp_group   |  PROPERTY   |
----------------------------------------------------------------
|     3          |     email1     |   gmail       |  p1,p2,p3   |
|     1          |     email2     |   yahoo       |     p3      |
|     1          |     email3     |   other       |     p2      |
----------------------------------------------------------------

如果我能实现上述目标,那可能会解决我的问题。

我不确定这是否可行,但如果可行,请帮我写出来。

谢谢。

sql
  • 1 个回答
  • 51 Views
Martin Hope
John Beasley
Asked: 2024-08-24 03:17:26 +0800 CST

获取每个表中的每个电子邮件类型的计数

  • 6

继续我上一个问题:从多个表中获取每种电子邮件类型的计数

我必须得到澄清……

所以我确实需要多个表格。

然后我需要从每个表中获取所有“gmails”、“msfts”、“others”和“vmgs”的数量。

所有表格的设计都相同。表 1 可能类似于以下内容:

| EMAIL | MY_ISP | STATUS |
 -------------------------
| email1| gmail  | active |
 -------------------------
| email2| msft   | unsub  |
 -------------------------
| email3| vmg    | active |
 -------------------------
| email4| gmail  | active |
 -------------------------

table2 可能看起来像这样:

| EMAIL | MY_ISP | STATUS |
 -------------------------
| email1| gmail  | unsub  |
 -------------------------
| email2| msft   | active |
 -------------------------
| email3| vmg    | active |
 -------------------------
| email5| gmail  | unsub  |
 -------------------------

一封电子邮件可能存在于多个表中,但不会在同一张表中列出两次。同一封电子邮件可能在一个或多个表中处于活动状态,但可能不存在于另一个表中。

我需要获取每个表中所有处于活动状态的电子邮件的运行计数。

我需要显示最终产品:

TABLE | GMAIL | MSFT | OTHER | VMG 
-----------------------------------
T1    | 5000  | 7000 | 4500  | 475
-----------------------------------
T2    | 4520  | 6789 | 4450  | 425
-----------------------------------
T3    | 4400  | 6500 | 4123  | 410
-----------------------------------

类似这样。一直到 T15。

随着我不断添加更多表,总数应该逐渐减少,直到几乎为 0。

我希望这是有道理的。

我很难理解这个逻辑。

根据我之前的问题,我可以使用以下查询获取 MY_ISP 的总数:

SELECT COUNT(`my_isp`) AS 'COUNT', `my_isp` FROM `table1` GROUP BY `my_isp`

并会吐出类似这样的内容:

COUNT | my_isp
---------------
4000  | Gmail
---------------
2000  | MSFT
---------------
10000 | other
---------------
15000 | VMG
---------------

我可以使用如下方法获取每个 MY_ISP 的总数:

select my_isp ,sum(cnt) AS total
 from (select my_isp,count(t1.`my_isp`) cnt from `table1` t1 group by my_isp
      UNION ALL
       select my_isp,count(t2.`my_isp`) cnt from `table2` t2 group by my_isp
      ) subquery_name
 group by my_isp

上面的方法确实很有效。但这并不是要求的。

因此,重申一下,我需要获取每个表中 GMAILS、MSFT、VMG 和其他的数量。

请帮我弄清楚这个查询应该是什么样子,因为我迷路了。

如果取得进展,我将继续进行测试并更新问题。

** 编辑 **

我在想也许我需要创建一个视图,将不同的 MY_ISP 显示为列标题,并将每个 TABLE 显示为行。

sql
  • 2 个回答
  • 44 Views
Martin Hope
John Beasley
Asked: 2024-08-23 20:43:35 +0800 CST

从多个表中获取每种电子邮件类型的数量

  • 5

我有 15 多个包含电子邮件的表格。我需要计算每个互联网服务提供商(如 GMAIL、VMG、MSFT 或其他)有多少个电子邮件。

使用以下查询,我可以得到一个表的 ISP 数量:

SELECT COUNT(`my_isp`) AS 'COUNT', `my_isp` FROM `table1` GROUP BY `my_isp`

这将输出如下内容:

COUNT | my_isp
---------------
4000  | Gmail
---------------
2000  | MSFT
---------------
10000 | other
---------------
15000 | VMG
---------------

我需要做的是获取每个表的上述内容的总数,我有超过 15 个表。

说实话我不太清楚该如何开始。

** 编辑 **

所有表格都具有相同的格式和相同的列。它们都看起来像这样:

EMAIL | PROPERTY | STATUS | MY_ISP | CREATED_DATE | OTHER_DATES

有些电子邮件会存在于多个表中。每个表的 PROPERTY 会有所不同,STATUS 和 Date 列也会有所不同(我没有列出所有日期列)。

** 编辑 2 **

因此我尝试使用如下 UNION ALL:

select COUNT(`my_isp`) AS 'COUNT'
from (select count(t1.`my_isp`) from `table1` t1
    UNION ALL
    select count(t2.`my_isp`) from `table2` t2
   ) 

但我收到以下错误:

#1248 - Every derived table must have its own alias
sql
  • 2 个回答
  • 52 Views
Martin Hope
John Beasley
Asked: 2024-08-15 01:49:25 +0800 CST

搜索单元格以查看文本是否存在并在另一个单元格中打印结果

  • 5

我正在尝试在 A 列中寻找电子邮件服务提供商,其中包含一系列电子邮件地址。

在 K 列中,我想要打印出 A 列中的电子邮件是“gmail”、“yahoo”还是“其他”电子邮件帐户。

  • 任何非 gmail 或 yahoo 的内容都应标记为“其他”。

我可以使用以下公式来检查“gmail”是否存在:

=IF(COUNTIF(A2,"*gmail*"),"gmail")

截至目前,如果 A 列中不存在 gmail,它将吐出 FALSE,但如果 A 列中的电子邮件是 gmail,它就会吐出。

我如何在公式中添加检查“yahoo”并将其他所有内容添加为“其他”?

google-sheets
  • 2 个回答
  • 32 Views
Martin Hope
John Beasley
Asked: 2024-07-01 04:08:48 +0800 CST

React 无法解析引导程序

  • 5

在遵循教程的同时,我通过运行以下命令启动了这个 React 项目的前端:

npx create-react-app frontend

本教程的讲师指定他正在使用 bootstrap,但没有说明他将其安装在哪里。

因此,当我看到 Index.js 部分时,我看到了他需要它的地方:

import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import "boostrap/dist/css/bootstrap.min.css";

const root = ReactDOM.createRoot(document.getElementById("root"));
  root.render(
   <React.StrictMode>
    <App />
   </React.StrictMode>
  );

reportWebVitals();

由于知道老师没有解释他在何时何地安装了 bootstrap,因此我尝试自己从 frontend 文件夹中进行安装,如下所示:

npm install react-bootstrap bootstrap

我可以在 node_modules 文件夹内看到 bootstrap 文件夹。

因此,当我运行 npm-start 时,出现以下错误消息:

Module not found: Error: Can't resolve 'boostrap/dist/css/bootstrap.min.css' in '/Users/jaybee/Desktop/Files/Main/2024/Projects/web/react/registration/frontend/src'
ERROR in ./src/index.js 9:0-45
Module not found: Error: Can't resolve 'boostrap/dist/css/bootstrap.min.css' in '/Users/jaybee/Desktop/Files/Main/2024/Projects/web/react/registration/frontend/src'

我做错了什么?我该如何改正?

reactjs
  • 1 个回答
  • 19 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve