mysql实现行转列作为临时表、以及字符分割行转列

2023-10-26

1.需求:实现两个日期段转换为具体的日期天数(2022-10-23至2022-10-26得到一张2022-10-23、2022-10-24、2022-10-25、2022-10-26的临时表) 

SELECT
    DATE_FORMAT( DATE_ADD( '2022-10-23 22:00:00', INTERVAL ( help_topic_id ) DAY ), '%Y-%m-%d' ) AS days 
FROM
    mysql.help_topic 
WHERE
    help_topic_id <= TIMESTAMPDIFF(
        DAY,
    CONCAT( '2022-10-23 22:00:00' ),
    CONCAT( '2022-12-26 22:00:00' ))

help_topic本身是Mysql一个帮助解释注释表,用于解释Mysql各种专有名词,由于这张表数据ID是从0顺序增加的,方便我们用于计数,但是8.0.17版本的只有686条数据,超过这个数字,我们就需要己自定义一张表。

可以用做计数的临时表,查询的语句只会用help_topic计数,超出的部分其实都是脏数据。

help_topic 是数据库mysql的一个表,该表提供查询帮助主题给定关键字的详细内容(详细帮助信息)
表字段含义:

         help_topic_id:帮助主题详细信息在表记录中对应的ID(从0开始自增到686
        name:帮助主题给定的关键字名称。
        help_category_id:帮助主题类别ID,与help_category表中的help_category_id字段值相等。
        description:帮助主题的详细信息(这里就是我们通常查询帮助信息真正想看的内容,例如:告诉我们某某语句如何使用的语法与注意事项等)。
        example:帮助主题的示例信息(告诉我们语句如何使用的示例)。
        url:该帮助主题对应在MySQL官方在线手册中的URL链接地址。

 

#查询本周第一天
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) DAY) AS TIME

#查询本周的最后一天
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE())-6 DAY) AS TIME

#查询本月的第一天
SELECT DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) AS TIME

#查询本月的最后一天
SELECT LAST_DAY(CURDATE()) AS TIME

#当前quarter的第一天:  
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM  CURDATE()),1) + interval QUARTER(CURDATE())*3-3 month),'%Y-%m-'),'01'); 
 
#当前quarter的最后一天:  
select LAST_DAY(MAKEDATE(EXTRACT(YEAR  FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-1 month);

#当年第一天:
SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY);
 
#当年最后一天:
SELECT concat(YEAR(now()),'-12-31'); 

#新增一个星期
SELECT DATE_ADD(now(), INTERVAL 1 week) time

#新增一个月
SELECT DATE_ADD(now(), INTERVAL 1 month) time

#新增一个季度
SELECT DATE_ADD(now(), INTERVAL 1 quarter) time

#新增一年
SELECT DATE_ADD(now(), INTERVAL 1 year) time

查询本日,本周,本月,本年的数据

#查询本日的数据
SELECT T.* FROM buz_sampling_data T
WHERE TO_DAYS(TIME) = TO_DAYS(NOW())


#查询本周的数据
SELECT T.* FROM buz_sampling_data T
WHERE YEARWEEK(TIME,1) = YEARWEEK(NOW(),1)


#查询本月的数据
SELECT T.* FROM buz_sampling_data T
WHERE MONTH(TIME) = MONTH(NOW())


#查询本年的数据
SELECT T.* FROM buz_sampling_data T
WHERE YEAR(TIME) = YEAR(NOW())

 

需要将字符串(电脑IP)192.168.211.35(按照.进行拆分)


SELECT
    SUBSTRING_INDEX( SUBSTRING_INDEX( t.ip, '.', h.help_topic_id + 1 ), '.', - 1 )
FROM
    test.test t
    JOIN mysql.help_topic h ON h.help_topic_id < ( LENGTH( t.ip ) - LENGTH( REPLACE ( t.ip, '.', '' )) + 1 );

 SUBSTRING_INDEX(str,delim,count)函数

str: 要分割的字符串

delim: 分割符(比如逗号,和点.)

count: 计数(分割到第几个),正数表示从左向右数,负数表示从右向左数

LENGH函数 

LENGTH(str) 统计字符串的长度

REPLACE(str,from_str,to_str) 替换字符串

用to_str替换from_str得到最终的str

参数:

str:最终得到的字符串

from_str: 旧的字符(被替换的字符)

to_str: 新的字符

结果就是用新的字符替换旧的字符,得到的最终的字符串

SELECT REPLACE('192.168.211.35','.',''); -- 得到19216821135

SELECT LENGTH(REPLACE('192.168.211.35','.','')); -- 得到长度是11

遇到的问题
sql执行报错:SELECT command denied to user '###' for table 'help_topic'
SELECT命令拒绝用户 '###‘用于表’help_topic’

原因 :
mysql用户没有执行查询help_topic表的权限,需要root用户授权。
解决
用mysql的root账户执行 GRANT SELECT ON mysql.help_topic TO 'wp'@'localhost'(给用户授予mysql.help_topic的查询权限)
 

创建用户
方式1: CREATE USER 'wp'@'localhost' IDENTIFIED BY '123456';
方式2: GRANT USAGE ON *.* TO 'wp'@'localhost' IDENTIFIED BY '132456';
删除用户
DROP USER 'wp'@'localhost';
查询用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
用户授权
GRANT SELECT ON mysql.help_topic TO 'wp'@'localhost'
取消用户授权
REVOKE SELECT ON mysql.help_topic FROM 'wp'@'localhost';
查询用户授权
SHOW GRANTS FOR 'wp'@'localhost';


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql实现行转列作为临时表、以及字符分割行转列 的相关文章

随机推荐

  • 相关概念地址笔记

    公平锁与非公平锁 https www jianshu com p f584799f1c77 java socket编程https www cnblogs com mingforyou p 3258418 html java四种引用类型htt
  • markdown文档:一个简单标记语言的使用及GitHub实际应用

    目录 1 什么是Markdown 2 Markdown与HTML的简单对比 3 Markdown的基本语法 4 GitHub中Markdown的使用 4 1 GitHub上自定义的md文件格式与markdown pad IDE 的区别 4
  • CS143:编译原理实验PA1

    PA1报告 Stack Machine 实验内容 基于cool语言实现一个可执行若干指令的stack machine 要求实现的栈机可以满足以下命令 Command Meaning int 将该整数压入栈 s 将字符s压入栈 e 根据栈顶元
  • Servlet原理

    Mapping问题 package com kuang servlet import javax servlet ServletException import javax servlet http HttpServletRequest i
  • 对MTK的pdaf对焦方式的分析

    上周五分析了下mt6752的pdaf对焦规律 以前一直认为pdaf对焦不可能准到一步到位 应该是走到清晰点附近后再用CAF 反差式 对焦到最清晰点 但通过log查看 感觉应该是分几种情况 如果pdaf的可信度高 比如色彩分明 环境亮度高 则
  • Angular基础(八) Observable & RxJS

    对于一个应用来说 获取数据的方法可以有很多 比如 Ajax Websockets LocalStorage Indexdb Service Workers 但是如何整合多种数据源 如何避免BUG 如何提高可维护性 如何提升应用的速度 这些却
  • vue3中使用jweixin-module报错

    在vue3中使用 var jweixin require jweixin module 会编译报错 require is not defined 没有require模块 改成import的话 由于jweixin module不支持expor
  • REDIS 4 集群搭建

    REDIS 4 集群搭建 1 下载 redis wget http download redis io releases redis 4 0 10 tar gz tar xzf redis 4 0 10 tar gz cd redis 4
  • [学习笔记]Centos7虚拟机网络重启失败

    好久没用虚拟机了 这次学习的时候打开之前安装好的Centos7发现又连不了网了 在网上跟着教程配置好IP之后重启网络服务 执行service network restart命令 出现了错误 Restarting network via sy
  • Install ModelSim on Linux

    To use ModelSim on Linux is quite difficult There is only exe file for installing ModelSim on Windows on the official we
  • php的phpstoem代码编辑器的快捷键,比较常用的归纳

    1 CTRL SHIFT N 全局搜索文件 优先文件名匹配的文件 2 CTRL R 当前窗口替换文本 3 CTRL E 最近打开的文件 4 F5 复制文件 文件夹 5 CTRL C 复制 CTRL V 粘贴 CTRL X 剪切 删除行 Ct
  • Linux 面试题-(腾讯,百度,美团,滴滴)

    Linux 面试题 腾讯 百度 美团 滴滴 分析日志t log 访问量 将各个ip 地址截取 并统计出现次数 并按从大到小排序 腾讯 http 192 168 200 10 index1 html http 192 168 200 10 i
  • 用两成数据也能训练出十成功力的模型,Jina Embeddings 这么做

    句向量 Sentence Embeddings 模型在多模态人工智能领域起着至关重要的作用 它通过将句子编码为固定长度的向量表示 将语义信息转化为机器可以处理的形式 在 文本分类 信息检索和相似度计算 等多个方面有着广泛应用 然而长期以来
  • unity 动画 - Animator 的使用

    创建 animator 文件 命名为 nanzhanshi2 controller 双击打开文件 默认三个 State AnyState Entry Exit Parameters 有四种类型的参数 Float Int Bool Trigg
  • cocos控制相机旋转

    import decorator Component Event EventMouse find Input input Node v3 Vec3 from cc const ccclass property decorator cccla
  • 1.Cherry Pick与Create Patch的区别

    Cherry Pick与Create Patch的区别 结论 实验 场景1 应用时无冲突 场景2 应用时产生冲突 使用cherry pick 使用patch 场景3 产生冲突 并且有其他文件的变更 原理 结论 1 应用无冲突时cherry
  • Java全栈体系路线(总结不易,持续更新中)

    文章目录 Java全栈工程师 font color orange Java基础 基础语法 面向对象 工具类 集合框架 序列化 反射机制 注解 文件处理 设计模式 视频教程 文档教程 练习题 面试题 GUI模块 多线程模块 Socket模块
  • VS2019修改代码后必须重新生成解决方案

    这是因为没有配置好 在工具 gt 选项 gt 生成和运行 gt 运行时 项目过期 在这里选择始终生成 这样的话就可以在修改代码之后自动重新生成解决方案
  • 钉钉环境下H5开发微应用遇到的问题和BUG(持续更新)

    项目类型 CRM 项目描述 微应用是钉钉为连接企业办公打造的移动入口 通过微应用你可以将企业的业务审批 内部系统 生成 协作 管理 上下游沟通连接到钉钉 该项目是在钉钉的基础上开发一个供本公司销售使用的客户管理系统 包含了客户 项目 订单
  • mysql实现行转列作为临时表、以及字符分割行转列

    1 需求 实现两个日期段转换为具体的日期天数 2022 10 23至2022 10 26得到一张2022 10 23 2022 10 24 2022 10 25 2022 10 26的临时表 SELECT DATE FORMAT DATE