2

旧 Drupal 4.7 评论表中的“线程”列是 varchar(255),我需要将其转换为 bigint(20) 以使其适用于 Wordpress wp_comments 表中的“comment_parent”列。

我尝试了各种我见过的 Cast 和 Convert 命令,但总是遇到语法错误。

4

3 回答 3

2

这适用于SQL Server

create table Comments 
(
    [thread] nvarchar(255)
) 

insert comments 
select '1' 
union select '2' 
union select '3' 
union select '4' 
union select '5' 
union select 'x' 

select 
    case 
        when ISNUMERIC([thread]) > 0 
            then CAST([thread] as bigint) 
        else 
            null 
    end colAsBigInt 
    , [thread] colAsNvarChar 
from comments

http://sqlfiddle.com/#!6/337eb/1

对于MySQL尝试:

create table if not exists Comments 
(
    thread varchar(255) character set UTF8 not null
);

insert comments(thread) values ('1');
insert comments(thread) values ('2');
insert comments(thread) values ('3');
insert comments(thread) values ('4');
insert comments(thread) values ('5');
insert comments(thread) values ('6.1');
insert comments(thread) values ('x');

select 
    case 
        when thread  REGEXP ('^(-|\\+)?([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+|[0-9]+)$') 
            then cast(thread as signed)
        else 
            null 
    end colAsBigInt 
    , thread colAsVarChar 
from comments

--regex trick from here: http://forums.mysql.com/read.php?60,1907,241284#msg-241284
--without the regex you'll get 0s instead of nulls for invalid values
--MySQL's cast only works on certain data types, given here http://www.roseindia.net/sql/mysql-example/mysql-cast.shtml

此处可运行 MySQL 示例:http ://sqlfiddle.com/#!2/6d848/9

于 2012-11-27T23:45:02.110 回答
1

当我运行您为 MySQL 提供的第二组代码时,它没有将该列转换为 BigInt。它确实提供了 colasBigInt 和 colasVarChar 的并排比较。无一例外,对于数千行,无论 colasVarChar 值如何,所有 colasBigInt 都读为 Null。

于 2012-12-03T04:34:07.377 回答
0

您遇到什么语法错误?你用的是什么数据库?

您可以提供的信息越多,就越有可能有人可以帮助您。

于 2012-11-27T23:38:07.820 回答