email address format sql oracle - sql

I want to insert email address as firstname.last_name#domain.com in my table
if i do the following:
insert into employee
values ('EMP01','Mona','Ali',first_name||'.'||LAST_NAME||'#dentalHouse.com');
i get column not allowed here. Help please. Dont complicate the answer though.
is there any way to get around rather than typing name again ?
Thank you

I am guessing that you want update:
update employee
set emailaddress = first_name || '.' || LAST_NAME || '#dentalHouse.com'
where empid = 'EMP01';
I am just guessing what the id column is named.

Related

How to get length of string using Oracle query

In a table I have columns FIRST_NAME and LAST_NAME. I have to concatenate the two names and retrieve names containing more than 12 characters.
I tried the following query:
select *
from (select first_name, last_name
from customer as name
)
where length(NAME) = 12
Select *
from (
select first_name||last_name as name
from customer
)
where length(name)>12
You need only one SELECT
SELECT first_name || last_name AS name
FROM customer
WHERE LENGTH(first_name||last_name) > 12
Optionally TRIM name and last_name from spaces.
As an alternative, if you rewrite your question to check if the total length of first name and last name is more than 12, you probably get a different response from people with a more efficient code. It is not necessary to make Oracle actually concatenate the columns.
Programmers are too literal these days. :)
You are not concatenating the first name and last name.
Also no need to write an inline view, below is the query.
select FIRST_NAME || LAST_NAME as NAME
from CUSTOMER
where length(FIRST_NAME || LAST_NAME) > 12;

Cant delete some table data using sql

I have a phone_book table. It has columns named id, first_name, last_name and phone. Im trying to delete all contacts with the first name of Jonathan and the last name of Luna.
My code is this
DELETE FROM phone_book WHERE first_name, last_name = "Jonathan" , "Luna";
Im getting a syntax error near the comma. Please help thanks
Set the WHERE conditions separated by AND:
DELETE FROM phone_book WHERE first_name = "Jonathan" AND last_name = "Luna";

SQL checking the last letter in string / AKA LIKE strange behaviour

I know it was already answered but it doesn't work for me.
So quick introduce:
I have table called swimmers. I'll insert new record to it which fulfils all columns:
INSERT INTO swimmers(id, first_name, last_name, age, gender)
VALUES(9,'Maria','Spolsky',34,'Female');
Now I want to find records in swimmers table which first_name DOES NOT end with letter a and where gender is Female
So I wrote SQL query:
SELECT first_name, last_name
FROM swimmers
WHERE first_name NOT LIKE '%a' AND gender = 'Female'
But it does return Maria which we just added. It basically returns every female
I'm using ORACLE iSQL plus.
EDIT:
I tried to use substr(first_name, -1) = 'a' but it turned out that -1 is empty, because I use varchar(20) and names are usually smaller than 20 characters
EDIT2:
I tried to find issue in data type. I used char(20) for first_name.
I changed it into varchar2(20):
ALTER TABLE swimmers
MODIFY first_name varchar2(20);
but didn't solve the issue
EDIT 3:
Changing NOT LIKE to WHERE first_name LIKE '%a' returns no rows. I believe issues lies inside data type and empty spaces from the end of the first_name to the end of reserved space for string (names has ~10 characters and I use `varchar2(20))
Appearantly oracles is adding spaces behind the name and that's why '%a' doesn't work, either change your column definition to a varchar (so oracle doesn't add the extra spaces) or trim the spaces out of your name like this:
SELECT first_name, last_name
FROM swimmers
WHERE NOT trim(first_name) LIKE '%a' AND gender = 'Female';

Search Results Rails SQL - Searching for users

I have a search field in my navigation bar where people can search for other users, like fb's friend search.
In my Users table i have first_name and last_name as columns and would like the search results to look through both tables. Right now I just have it working with the first name.
#usersfiltered = User.where("first_name LIKE?", "%#{params[:first_name]}%" )
Ideally, if there was an user named Bob Smith his name would come up if Bob, Smith, or Bob Smith was searched.
How would you go about adding to the SQL statement? I've tried a few things but keep getting errors. Thanks
You can use a symbol in your where method to pass in one value for multiple column like this:
#usersfiltered = User.where("first_name LIKE :search_name or last_name LIKE :search_name",
search_name: "%#{params[:search_word]}%" )
Update:
To search for first_name and last_name combined, you could concatenate the two fields and add another OR condition.
The problem here is different databases have their own concatenation style. Following are for MySQL and Postgres.
MySQL:
#usersfiltered = User.where("first_name LIKE :search_name or last_name LIKE :search_name or concat(first_name, ' ', last_name) like :search_name",
search_name: "%#{params[:search_word].squish}%" )
Postgres:
#usersfiltered = User.where("first_name LIKE :search_name or last_name LIKE :search_name or (first_name || ' ' || last_name) like :search_name",
search_name: "%#{params[:search_word].squish}%" )
I also added the Ruby string function squish, to take care of extra spaces.
#usersfiltered = User.where("first_name LIKE ? OR last_name LIKE ?", "%#{params[:first_name]}%", "%#{params[:last_name]}%")
However, if you have just one field that the user is typing into and you want to use it to search multiple names, I would think you'd want to name it something else besides "first_name" and use the approach described in the other answer.

How Do I SELECT when needing to use LIKE and change column Name

Here is the problem I am working on:
Select all the Oracle database employees whose last names end with ā€œsā€ Change the
heading of the column to read Possible Candidates.
I tried
SELECT last_name AS possible_candidates FROM * WHERE last_name LIKE '%s';
That returned the error :
ORA-00903: invalid table name
Unless I am reading the question wrong how do I check the entire database for something like this?
To answer the question which is asking for employee names not just last names you would select all employees with a last name that ends in S.
SELECT *
FROM employees
WHERE last_name LIKE '%s'
If the table has more than a first_name and last_name column you can do
SELECT first_name, last_name
FROM employees
WHERE last_name LIKE '%s'
Now to combine your two parts (Select employees and rename column)
Run one of the two queries above but add an AS statement as show in the example below.
SELECT *
AS Possible_Candidates
FROM employees
WHERE last_name LIKE '%s'
Based on feedback: this appears to be your answer...
Is there a table called employees? if that I would interpret the question as from the employees table. Otherwise, you could select table_name from All_TAB_COLS where column_name like = 'LAST_NAME' and then build a union from the resulting tables all of which have a field called 'LAST_NAME'