-
mysql进阶(八)怎么对varchar类型排序问题
2015-07-27 20:25:56MySQL中怎么对varchar类型排序问题 asc升级 desc降序 在mysql默认orderby只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同学介绍varchar类型排序问题如何解决。 今天在对...MySQL中怎么对varchar类型排序问题
asc 升级
desc降序
在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同学介绍varchar类型排序问题如何解决。
今天在对国家电话号码表进行排序的时候发现了一个有趣的问题,我想让isdcode字段按照由小到大的顺序排序,于是乎我是这样写的
SELECT * FROM gb_country_isdcode ORDER BY isdcode asc
结果如下,发现竟然不是我想要的结果,asc排序是对的呀,于是乎我找呀找,找呀找,终于找到原因了;
isdcode是varcher类型的,如果排序的直接用asc显然是不行的,必须将他转换成int类型然后就可以正常排序了,只要isdcode + 0就可以了
于是乎这样写
SELECT * FROM gb_country_isdcode ORDER BY (isdcode+0) asc
好像是想要的那种数据比较大小的了呀。。可是为什么+0就好了呢?原来,+0后就转换INT类型排序了。这样就可以按照大小排序了。
如果不是电话而是汉字怎么办,汉字排序我们只要进行简单转换即可排序了。
在mysql中使用order by对存储了中文信息的字段,默认出来的结果并不是按汉字拼音的顺序来排序,要想按汉字的拼音来排序,需要把数据库的字符集设置为UTF8,然后在order by 时候强制把该字段信息转换成GBK,这样出来的结果就是按拼音顺序排序的。例如:
SELECT * FROM table_name ORDER BY CONVERT(column_name USING gbk);
在mysql中试了一下,结果很令人满意。
结论是:查询的时候,通过convert函数,把查询出来的数据使用的字符集gb2312编码就可以了,然后使用convert之后的中文排序。但是如果真的去把表中字段的字符集改成gb2312,又会涉及到很多编码的问题,页面传值啊,从数据库中存取啊,很麻烦。只要在查询的时候,指定一下字符集,并不是真的把物理字段改成gb2312,很简单。
-
mysql varchar类型和oracle的varchar2类型
2020-07-14 12:54:46mysql varchar类型和oracle的varchar2类型 1. 案例说明 mysql的varchar(4000)同步到 oracle12c后被转换为varchar2(4000),当源端的值到5000以后,oracle这边就装不进去了。 2. 处理步骤 只得采用下列步骤更改...mysql varchar类型和oracle的varchar2类型
1. 案例说明
mysql的varchar(4000)同步到 oracle12c后被转换为varchar2(4000),当源端的值到5000以后,oracle这边就装不进去了。
2. 处理步骤
只得采用下列步骤更改oracle字段的数据类型
alter table CW.CUSTOMER drop REASON;
停掉业务执行,不停报ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
alter table CW_RZ.CUSTOMER add (REASON clob);3. 认识mysql的varchar类型
声明为varchar的列长度是可变的,mysql5.7.2 varchar的长度范围为0-65535个字节.采用varchar类型存储数据需要1-2个字节(长度超过255时需要2个字节)来存储字符串的实际长度.如果该列的编码为gbk,每个字符最多占用2个字节,最大长度不能超过32766个字符.如果该列的编码为utf8,每个字符最多占3个字节,最大字符长度为21845。由此可知mysql的varchar(4000)可以放5000个字节甚至更多,而oracle varchar2(4000)真就只能放4000个字节。 -
mysql varchar date_MySQL中把varchar类型转为date类型方法详解
2021-01-18 23:58:18如下表:先使用str_to_date函数,将其varchar类型转为日期类型,然后从小到大排序语法:select str_to_date(class_time,'%Y%m%d %H:%i:%s') a from a order by a desc ;下面接着看下oracle中varchar类型的日期格式...如下表:
先使用str_to_date函数,将其varchar类型转为日期类型,然后从小到大排序
语法:select str_to_date(class_time,'%Y%m%d %H:%i:%s') a from a order by a desc ;
下面接着看下oracle中varchar类型的日期格式转换date类型
oracle中varchar类型的日期格式转换date类型
SELECT to_char(to_date(m.ma_datetime,'yyyy-MM-dd hh24:mi:ss'),
'yyyyMMdd') FROM my_task m;
m.ma_datetime是varchar2类型的日期格式,先转换date类型
(必须添加时分秒,不然报ora-01830错误)
然后在随心所欲的转换成varchar类型
您可能感兴趣的文章:mysql中char与varchar的区别分析Mysql varchar大小长度问题介绍mysql VARCHAR的最大长度到底是多少mysql如何处理varchar与nvarchar类型中的特殊字符探究MySQL中varchar的定义长度MySQL数据库中把int转化varchar引发的慢查询Mysql数据库中把varchar类型转化为int类型的方法Mysql中varchar长度设置方法MySQL动态修改varchar长度的方法
-
blob转Varchar类型
2018-11-23 14:48:12昨天遇到一个问题,ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小,去找问题时候,发现是sql查询语句的to_char方法将clob类型转换成varchar类型出了问题,oracle中varchar最大的长度是4000。...昨天遇到一个问题,ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小,去找问题时候,发现是sql查询语句的to_char方法将clob类型转换成varchar类型出了问题,oracle中varchar最大的长度是4000。把clob大文本类型直接转换成varcahr类型时:在clob的长度小于4000的时候,没有超过varchar的最大值,不会出问题,一旦超过4000就会报“ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小”。
查询了相关资料后发现有两种解决方法:
①java中解决:利用流将数据读取到char[]中,然后再将char[].toString():
public String clobToString(){
Reader inReader;
try {
inReader = clob.getCharacterStream();
BufferedReader br = new BufferedReader(inReader);
String s = br.readLine();
StringBuffer sb = new StringBuffer();
while (s != null) {
sb.append(s);
s = br.readLine();
}
return sb.toString();
} catch (SQLException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}②sql中解决:将bold转换成clob,再将clob转换成varchar(注:从http://blog.csdn.net/wbo112/article/details/9041575中摘取):
oracle中varchar2字段存入blob字段及blob转成varchar2
CREATE OR REPLACE FUNCTION C2B (b IN CLOB default empty_clob()) RETURN BLOB
-- typecasts BLOB to CLOB (binary conversion)
IS
res BLOB;
b_len number := dbms_lob.getlength(b) ;
dest_offset1 NUMBER := 1;
src_offset1 NUMBER := 1;
amount_c INTEGER := DBMS_LOB.lobmaxsize;
blob_csid NUMBER := DBMS_LOB.default_csid;
lang_ctx INTEGER := DBMS_LOB.default_lang_ctx;
warning INTEGER;
BEGIN
if b_len > 0 then
DBMS_LOB.createtemporary (res, TRUE);
DBMS_LOB.OPEN (res, DBMS_LOB.lob_readwrite);
DBMS_LOB.convertToBlob (res,
b,
amount_c,
dest_offset1,
src_offset1,
blob_csid,
lang_ctx,
warning
);
else
select empty_blob() into res from dual ;
end if ;
RETURN res; -- res is OPEN here
END C2B;
1,首先利用to_clob函数把varchar2字段转成 clob字段。
2 利用上面函数将clob转成blob。
说白了就是 c2b(to_clob(varchar2字段))
create or replace Function Blob_To_Varchar (Blob_In In Blob) Return clob
Is
V_Varchar Varchar2(32767);
V_Varchar1 Varchar2(32767);
V_Start Pls_Integer := 1;
V_Buffer Pls_Integer := 4000;
Begin
If Dbms_Lob.Getlength(Blob_In) Is Null Then
Return '';
End If;
V_Varchar1 := '';
--return to_char(Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer));
For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop
--当转换出来的字符串乱码时,可尝试用注释掉的函数
--V_Varchar := Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));
V_Varchar := Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start));
V_Varchar1 := V_Varchar1 || V_Varchar;
V_Start := V_Start + V_Buffer;
End Loop;
Return V_Varchar1;
End Blob_To_Varchar;
1.首先执行上面的函数,返回的是个clob
2将clob转成varchar2
说白了 就是 to_char(Blob_To_Varchar(字段))
创建二个函数 然后就可以用了,如果说实现 数据库里面大字段的批量替换还是比较方便
update DR_RPT_REPORT_DATASOURCE
set data_sql =
c2b(to_clob((select replace(Blob_To_Varchar(data_sql),'XXX','XXX') from DR_RPT_REPORT_DATASOURCE where data_id
='XXXX' ))) where data_id = '' ;
文章参考于:https://blog.csdn.net/qq_15139447/article/details/51149361 -
达梦数据库varchar类型长度解析
2020-04-03 23:37:46我们在数据迁移或是往数据表中导入中文字符时,经常会出现varchar类型超过字符长度的报错,可是我们一看长度是够啊,怎么会报错,错在那里?今天我们就来分析一下varchar数据类型长度的占比。 在说varchar类型之前... -
Hive中varchar类型转换为int类型排序
2019-11-20 16:25:24Hive中varchar类型转换为int类型排序 MySQL为我们提供了两个类型转换函数:CAST和CONVERT 但貌似Hive中貌似只可用cast 如下 此处capital_loss为varchar类型,排序的时候会按照字符串排序方式;1开头的字符串排在前面... -
varchar 类型和int类型的区别
2018-11-27 17:39:45刚开始将每日点击量的字段类型设置成了varchar类型 错误的查询结果如下 备注 从左往右,字符串的比对也是从左往右,逐一进行大小比对,21作为字符串而不是整形数字时,它的首位2要比1大,所以作为最大字符被排列在... -
格式化Oracle中的varchar类型的时间为时间类型
2019-04-26 18:04:00OILDATE为varchar类型,欲将 20141130120140 格式化为 2014-11-30 12:01:40 select to_char(to_date(OILDATE, 'YYYYMMDD HH24MISS'), 'YYYY-MM-DD HH:MM:SS') AS OILDATE FROM PS_NYGK_OIL_GAS 先转换成date类型,... -
varchar类型的数字比较大小
2019-05-21 09:17:40varchar类型的数字在mysql中比较大小,或者用order by 排序的话,有时候会失效 最好的方法是转成float类型再进行比较 用cast(字段名 as 类型)函数做转换 如varchar类型的字段price,它要进行由低到高的排序,为了... -
HGDB新版本开始兼容oracle varchar2类型,作用pg里的varchar类型支持一致
2017-09-15 14:42:48HGDB新版本开始兼容oracle varchar2类型,作用pg里的varchar类型支持一致 HGDB 1.3.1还不支持varchar2类型: select version(); "HighGo Database 1.3.1 windows 64-bit" create table test (name varchar2... -
MySql中的varchar类型
2015-04-02 17:39:43MySql中的varchar类型 今天新开始的项目在做数据库设计,发现自己对MySql的varchar类型还不熟悉,故又上网收集资料整理如下。 1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本中的最大长度... -
mysql中varchar类型怎么转换成int类型
2017-05-10 08:25:25mysql中,怎么把varchar类型的字段转换成int类型的?(ps:是要把excel中的数据导到数据库的表中,可是excel中的那个字段内容是中文的,而数据库表里的那个字段内容是数字的,所以需要转换一下类型) -
PHP把科学计数格式转化为数字字符串,PHP用字段varchar类型进行比较排序
2019-08-19 12:41:08前言:在写API接口的时候,小游戏前端传过来的数据是科学计数法字符...1.强制性的用字段为varchar类型进行比较排序 'CAST(`cashnum_week` AS UNSIGNED) $list = $wx_user->field('id,user_name,head_img,cash... -
MySQL中,把varchar类型转为date类型
2019-10-02 21:21:07先使用str_to_date函数,将其varchar类型转为日期类型,然后从小到大排序 语法:select str_to_date(class_time,'%Y%m%d %H:%i:%s') a from a order by a desc ; 转载于:... -
问题解决:VARCHAR类型数据排序
2019-10-24 07:40:00在开发过程中,我们经常会遇到需要对数据排序的操作,但数据在库中的存储类型不一定是支持排序的,比如VARCHAR就不支持,那么如果和VARCHAR类型的数值进行排序呢。 解决方案 cast(value as decimal),使用... -
MySQL字段为varchar类型和int类型索引的使用技巧
2019-03-16 19:04:39MySQL索引使用:字段为varchar类型时,条件要使用' '包起来 结论: 当MySQL中字段为int类型时,搜索条件where num=‘111‘ 与where num=111都可以使用该字段的索引。 当MySQL中字段为varchar类型时,搜索条件where... -
DATASTAGE如何将VARCHAR类型转换为NUMBER类型
2018-07-12 11:49:32这个字段类型为varchar类型,内容里还带%,而目标表里是TRANSAMPRBF:NUMBER(24,6)。问题解决办法:在TRANSFORM组件里,将此字段映射改为:if isnull(DSLink14.TRANSAFPR)then setnull()else if TrimLeadingTrailing... -
Mysql varchar类型按大小排序
2019-12-22 21:25:02varchar类型ORDER BY按字符串排序,如下图 若想按数字大小排序,ORDER BY 的字段 + 0即可 SELECT request_number, created FROM asset_recovery_detail ORDER BY request_number + 0 ASC 效果如下: ... -
Mysql中的varchar类型转换成int类型
2018-11-01 11:33:08Mysql中的varchar类型转换成int类型 1.实战案例 1.1 student表结构 mysql> desc student; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--... -
关于mysql varchar类型索引失效问题。
2019-09-11 19:07:14记一次mysql varchar类型索引失效问题: left join 时候,两个varchar类型的编码不一致,会导致全表扫描。这时候需要更改表字段的编码 ,保持一致就好了。 ALTER TABLE `tablename` CHANGE `dd` `dd` VARCHAR( 45 ... -
Oracle数据库中的varchar2类型和varchar类型的区别和用法
2020-10-30 18:37:43varchar2(50) 表示该字段bai类型为varchar2类型,长度为50,可以存单字节字符50个,du如zhi字母、数dao字等,可以存储双字节字符25个,如汉字。 varchar2是Oracle中特有的一种数据库类型 varchar2 存贮为不定长。 ... -
emoji表情存入varchar类型的字段报错
2019-06-19 10:27:34emoji表情存入varchar类型的字段报错 emoji表情存入varchar类型的字段报错信息如下: Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x82’ for column ‘title’ at row 1 ; uncategorized... -
Oracle varchar类型数值排序问题
2018-05-28 16:40:27问题描述:A表中存在一个类型为varchar2的字段xh(序号),现根据xh排序SQL:select xh from A a order by a.xh;查询的结果为:1、10、11、12、13、14、15、16、17、18、...问题分析:排序时,因xh为varchar类型故... -
mysql varchar 类型的等于
2016-05-19 14:37:53mysql varchar 类型的等于 mysql在做条件匹配的时候会根据等号后面的只做相应的类型转换,因而会导致一些我们认为的问题。 我遇到的问题: 数据 id name 1 xiaoli 1c8b31325b86468280422ef9957e100d xiaoguo 1... -
怎么比较sql语句中的varchar类型的大小
2019-05-31 10:40:08各位大佬,在sqlserver2016中怎么比较24cm和9.2cm这两个字段的大小啊?而且24cm是varchar类型的字段 -
关于数据库中char类型与varchar类型的适用情况对比
2020-03-06 13:57:01数据库中char类型与varchar类型的适用情况1.在mysql中测试1.1.在mysql中新建stu表1.2.添加一条数据并查询1.3 测试条件查询2.在sql server中测试2.1 在sql server 中创建stu表2.2添加一条数据并查询2.3测试条件查询3....